@remix-run/ui 0.1.2 → 0.3.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/README.md +9 -7
- package/dist/animation/demos/animation.demo.d.ts +5 -0
- package/dist/animation/demos/animation.demo.js +92 -0
- package/dist/animation/demos/animation.demo.js.map +1 -0
- package/dist/animation/demos/aspect-ratio.d.ts +2 -0
- package/dist/animation/demos/aspect-ratio.js +69 -0
- package/dist/animation/demos/aspect-ratio.js.map +1 -0
- package/dist/animation/demos/bouncy-switch.d.ts +2 -0
- package/dist/animation/demos/bouncy-switch.js +36 -0
- package/dist/animation/demos/bouncy-switch.js.map +1 -0
- package/dist/animation/demos/color-interpolation.d.ts +1 -0
- package/dist/animation/demos/color-interpolation.js +53 -0
- package/dist/animation/demos/color-interpolation.js.map +1 -0
- package/dist/animation/demos/cube.d.ts +2 -0
- package/dist/animation/demos/cube.js +86 -0
- package/dist/animation/demos/cube.js.map +1 -0
- package/dist/animation/demos/default-animate.d.ts +2 -0
- package/dist/animation/demos/default-animate.js +89 -0
- package/dist/animation/demos/default-animate.js.map +1 -0
- package/dist/animation/demos/drag-release.d.ts +24 -0
- package/dist/animation/demos/drag-release.js +96 -0
- package/dist/animation/demos/drag-release.js.map +1 -0
- package/dist/animation/demos/enter.d.ts +1 -0
- package/dist/animation/demos/enter.js +19 -0
- package/dist/animation/demos/enter.js.map +1 -0
- package/dist/animation/demos/exit.d.ts +2 -0
- package/dist/animation/demos/exit.js +58 -0
- package/dist/animation/demos/exit.js.map +1 -0
- package/dist/animation/demos/flip-toggle.d.ts +2 -0
- package/dist/animation/demos/flip-toggle.js +37 -0
- package/dist/animation/demos/flip-toggle.js.map +1 -0
- package/dist/animation/demos/hold-to-confirm.d.ts +13 -0
- package/dist/animation/demos/hold-to-confirm.js +211 -0
- package/dist/animation/demos/hold-to-confirm.js.map +1 -0
- package/dist/animation/demos/html-content.d.ts +2 -0
- package/dist/animation/demos/html-content.js +30 -0
- package/dist/animation/demos/html-content.js.map +1 -0
- package/dist/animation/demos/interruptible-keyframes.d.ts +1 -0
- package/dist/animation/demos/interruptible-keyframes.js +48 -0
- package/dist/animation/demos/interruptible-keyframes.js.map +1 -0
- package/dist/animation/demos/keyframes.d.ts +1 -0
- package/dist/animation/demos/keyframes.js +24 -0
- package/dist/animation/demos/keyframes.js.map +1 -0
- package/dist/animation/demos/material-ripple.d.ts +2 -0
- package/dist/animation/demos/material-ripple.js +127 -0
- package/dist/animation/demos/material-ripple.js.map +1 -0
- package/dist/animation/demos/mixin-presence-list.d.ts +2 -0
- package/dist/animation/demos/mixin-presence-list.js +88 -0
- package/dist/animation/demos/mixin-presence-list.js.map +1 -0
- package/dist/animation/demos/mixin-reclaim.d.ts +2 -0
- package/dist/animation/demos/mixin-reclaim.js +90 -0
- package/dist/animation/demos/mixin-reclaim.js.map +1 -0
- package/dist/animation/demos/multi-state-badge.d.ts +2 -0
- package/dist/animation/demos/multi-state-badge.js +231 -0
- package/dist/animation/demos/multi-state-badge.js.map +1 -0
- package/dist/animation/demos/press.d.ts +2 -0
- package/dist/animation/demos/press.js +63 -0
- package/dist/animation/demos/press.js.map +1 -0
- package/dist/animation/demos/reordering.d.ts +2 -0
- package/dist/animation/demos/reordering.js +50 -0
- package/dist/animation/demos/reordering.js.map +1 -0
- package/dist/animation/demos/rolling-square.d.ts +2 -0
- package/dist/animation/demos/rolling-square.js +42 -0
- package/dist/animation/demos/rolling-square.js.map +1 -0
- package/dist/animation/demos/rotate.d.ts +1 -0
- package/dist/animation/demos/rotate.js +18 -0
- package/dist/animation/demos/rotate.js.map +1 -0
- package/dist/animation/demos/shared-layout.d.ts +2 -0
- package/dist/animation/demos/shared-layout.js +114 -0
- package/dist/animation/demos/shared-layout.js.map +1 -0
- package/dist/animation/demos/spring.demo.d.ts +6 -0
- package/dist/animation/demos/spring.demo.js +304 -0
- package/dist/animation/demos/spring.demo.js.map +1 -0
- package/dist/animation/demos/transition-options.d.ts +1 -0
- package/dist/animation/demos/transition-options.js +21 -0
- package/dist/animation/demos/transition-options.js.map +1 -0
- package/dist/animation/spring.d.ts +24 -31
- package/dist/animation/spring.js +31 -8
- package/dist/animation/spring.js.map +1 -1
- package/dist/components/accordion/accordion.d.ts +6 -6
- package/dist/components/accordion/accordion.js.map +1 -1
- package/dist/components/accordion/demos/card.demo.d.ts +1 -0
- package/dist/components/accordion/demos/card.demo.js +1 -0
- package/dist/components/accordion/demos/card.demo.js.map +1 -1
- package/dist/components/accordion/demos/multiple.demo.d.ts +1 -0
- package/dist/components/accordion/demos/multiple.demo.js +1 -0
- package/dist/components/accordion/demos/multiple.demo.js.map +1 -1
- package/dist/components/accordion/demos/overview.demo.d.ts +1 -0
- package/dist/components/accordion/demos/overview.demo.js +1 -0
- package/dist/components/accordion/demos/overview.demo.js.map +1 -1
- package/dist/components/anchor/anchor.d.ts +8 -1
- package/dist/components/anchor/anchor.js +30 -11
- package/dist/components/anchor/anchor.js.map +1 -1
- package/dist/components/breadcrumbs/{demos/basic.demo.d.ts → basic.demo.d.ts} +1 -0
- package/dist/components/breadcrumbs/{demos/basic.demo.js → basic.demo.js} +1 -0
- package/dist/components/breadcrumbs/basic.demo.js.map +1 -0
- package/dist/components/breadcrumbs/breadcrumbs.d.ts +1 -1
- package/dist/components/breadcrumbs/{demos/separator.demo.d.ts → separator.demo.d.ts} +1 -0
- package/dist/components/breadcrumbs/{demos/separator.demo.js → separator.demo.js} +1 -0
- package/dist/components/breadcrumbs/separator.demo.js.map +1 -0
- package/dist/components/button/button.d.ts +4 -4
- package/dist/components/button/button.js +3 -1
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button/demos/aliases.demo.d.ts +1 -0
- package/dist/components/button/demos/aliases.demo.js +1 -0
- package/dist/components/button/demos/aliases.demo.js.map +1 -1
- package/dist/components/button/demos/basic.demo.d.ts +1 -0
- package/dist/components/button/demos/basic.demo.js +1 -0
- package/dist/components/button/demos/basic.demo.js.map +1 -1
- package/dist/components/button/demos/states.demo.d.ts +1 -0
- package/dist/components/button/demos/states.demo.js +1 -0
- package/dist/components/button/demos/states.demo.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +10 -10
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/combobox/{demos/overview.demo.d.ts → overview.demo.d.ts} +1 -0
- package/dist/components/combobox/{demos/overview.demo.js → overview.demo.js} +1 -0
- package/dist/components/combobox/overview.demo.js.map +1 -0
- package/dist/components/listbox/listbox.d.ts +3 -3
- package/dist/components/listbox/listbox.js.map +1 -1
- package/dist/components/listbox/{demos/overview.demo.d.ts → overview.demo.d.ts} +1 -0
- package/dist/components/listbox/{demos/overview.demo.js → overview.demo.js} +1 -0
- package/dist/components/listbox/overview.demo.js.map +1 -0
- package/dist/components/menu/demos/bubbling.demo.d.ts +1 -0
- package/dist/components/menu/demos/bubbling.demo.js +1 -0
- package/dist/components/menu/demos/bubbling.demo.js.map +1 -1
- package/dist/components/menu/demos/context-trigger.demo.d.ts +7 -0
- package/dist/components/menu/demos/context-trigger.demo.js +87 -0
- package/dist/components/menu/demos/context-trigger.demo.js.map +1 -0
- package/dist/components/menu/demos/overview.demo.d.ts +1 -0
- package/dist/components/menu/demos/overview.demo.js +1 -0
- package/dist/components/menu/demos/overview.demo.js.map +1 -1
- package/dist/components/menu/menu.d.ts +15 -12
- package/dist/components/menu/menu.js +55 -0
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/popover/{demos/overview.demo.d.ts → overview.demo.d.ts} +1 -0
- package/dist/components/popover/{demos/overview.demo.js → overview.demo.js} +1 -0
- package/dist/components/popover/overview.demo.js.map +1 -0
- package/dist/components/popover/popover.d.ts +7 -7
- package/dist/components/popover/popover.js +11 -4
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/select/{demos/deconstructed.demo.d.ts → deconstructed.demo.d.ts} +1 -0
- package/dist/components/select/{demos/deconstructed.demo.js → deconstructed.demo.js} +1 -0
- package/dist/components/select/deconstructed.demo.js.map +1 -0
- package/dist/components/select/{demos/overview.demo.d.ts → overview.demo.d.ts} +1 -0
- package/dist/components/select/{demos/overview.demo.js → overview.demo.js} +1 -0
- package/dist/components/select/overview.demo.js.map +1 -0
- package/dist/components/select/select.d.ts +10 -10
- package/dist/components/select/select.js +1 -1
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/tabs/tabs.d.ts +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactions/keydown/keydown.d.ts +1 -1
- package/dist/interactions/outside-click/outside-click-mixin.d.ts +2 -1
- package/dist/interactions/typeahead/typeahead-mixin.d.ts +3 -1
- package/dist/runtime/client-entries.d.ts +1 -2
- package/dist/runtime/client-entries.js.map +1 -1
- package/dist/runtime/component.d.ts +20 -17
- package/dist/runtime/component.js +15 -6
- package/dist/runtime/component.js.map +1 -1
- package/dist/runtime/core/attributes.d.ts +3 -1
- package/dist/runtime/core/attributes.js +19 -1
- package/dist/runtime/core/attributes.js.map +1 -1
- package/dist/runtime/core/props.js +6 -5
- package/dist/runtime/core/props.js.map +1 -1
- package/dist/runtime/demos/basic.demo.d.ts +6 -0
- package/dist/runtime/demos/basic.demo.js +16 -0
- package/dist/runtime/demos/basic.demo.js.map +1 -0
- package/dist/runtime/demos/controlled-uncontrolled-values.demo.d.ts +6 -0
- package/dist/runtime/demos/controlled-uncontrolled-values.demo.js +77 -0
- package/dist/runtime/demos/controlled-uncontrolled-values.demo.js.map +1 -0
- package/dist/runtime/demos/keyed-list.demo.d.ts +6 -0
- package/dist/runtime/demos/keyed-list.demo.js +62 -0
- package/dist/runtime/demos/keyed-list.demo.js.map +1 -0
- package/dist/runtime/demos/readme.demo.d.ts +5 -0
- package/dist/runtime/demos/readme.demo.js +396 -0
- package/dist/runtime/demos/readme.demo.js.map +1 -0
- package/dist/runtime/diff-dom.js +194 -21
- package/dist/runtime/diff-dom.js.map +1 -1
- package/dist/runtime/dom.d.ts +16 -9
- package/dist/runtime/frame.d.ts +7 -0
- package/dist/runtime/frame.js +176 -41
- package/dist/runtime/frame.js.map +1 -1
- package/dist/runtime/jsx.d.ts +3 -4
- package/dist/runtime/jsx.js.map +1 -1
- package/dist/runtime/mixins/link-mixin.d.ts +5 -1
- package/dist/runtime/mixins/link-mixin.js.map +1 -1
- package/dist/runtime/mixins/mixin.d.ts +2 -1
- package/dist/runtime/mixins/mixin.js.map +1 -1
- package/dist/runtime/mixins/ref-mixin.d.ts +2 -1
- package/dist/runtime/mixins/ref-mixin.js.map +1 -1
- package/dist/runtime/reconcile.d.ts +1 -1
- package/dist/runtime/reconcile.js +19 -5
- package/dist/runtime/reconcile.js.map +1 -1
- package/dist/runtime/scheduler.d.ts +10 -10
- package/dist/runtime/scheduler.js +1 -1
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/svg-attributes.js +1 -0
- package/dist/runtime/svg-attributes.js.map +1 -1
- package/dist/runtime/to-vnode.js +2 -2
- package/dist/runtime/to-vnode.js.map +1 -1
- package/dist/runtime/vnode.d.ts +6 -1
- package/dist/runtime/vnode.js +4 -0
- package/dist/runtime/vnode.js.map +1 -1
- package/dist/server/stream.d.ts +2 -0
- package/dist/server/stream.js +82 -11
- package/dist/server/stream.js.map +1 -1
- package/dist/style/css-mixin.d.ts +2 -1
- package/dist/style/css-mixin.js.map +1 -1
- package/dist/style/index.d.ts +1 -1
- package/dist/style/style.js +27 -10
- package/dist/style/style.js.map +1 -1
- package/dist/style/stylesheet.d.ts +13 -13
- package/dist/style/stylesheet.js.map +1 -1
- package/dist/theme/contract.d.ts +24 -222
- package/dist/theme/contract.js +2 -2
- package/dist/theme/contract.js.map +1 -1
- package/dist/theme/glyph-contract.d.ts +1 -3
- package/dist/theme/glyph-contract.js.map +1 -1
- package/dist/theme/presets/rmx-01/index.d.ts +4 -2
- package/dist/theme/presets/rmx-01/index.js.map +1 -1
- package/dist/utils/scroll-lock.d.ts +3 -3
- package/dist/utils/scroll-lock.js.map +1 -1
- package/package.json +4 -4
- package/src/animation/README.md +7 -5
- package/src/animation/demos/animation.demo.tsx +194 -0
- package/src/animation/demos/aspect-ratio.tsx +120 -0
- package/src/animation/demos/bouncy-switch.tsx +47 -0
- package/src/animation/demos/color-interpolation.tsx +73 -0
- package/src/animation/demos/cube.tsx +116 -0
- package/src/animation/demos/default-animate.tsx +129 -0
- package/src/animation/demos/drag-release.ts +118 -0
- package/src/animation/demos/enter.tsx +22 -0
- package/src/animation/demos/exit.tsx +79 -0
- package/src/animation/demos/flip-toggle.tsx +46 -0
- package/src/animation/demos/hold-to-confirm.tsx +317 -0
- package/src/animation/demos/html-content.tsx +41 -0
- package/src/animation/demos/interruptible-keyframes.tsx +62 -0
- package/src/animation/demos/keyframes.tsx +29 -0
- package/src/animation/demos/material-ripple.tsx +158 -0
- package/src/animation/demos/mixin-presence-list.tsx +121 -0
- package/src/animation/demos/mixin-reclaim.tsx +125 -0
- package/src/animation/demos/multi-state-badge.tsx +426 -0
- package/src/animation/demos/press.tsx +67 -0
- package/src/animation/demos/reordering.tsx +65 -0
- package/src/animation/demos/rolling-square.tsx +57 -0
- package/src/animation/demos/rotate.tsx +21 -0
- package/src/animation/demos/shared-layout.tsx +211 -0
- package/src/animation/demos/spring.demo.tsx +385 -0
- package/src/animation/demos/transition-options.tsx +24 -0
- package/src/animation/spring.ts +43 -9
- package/src/components/accordion/accordion.tsx +7 -5
- package/src/components/accordion/demos/card.demo.tsx +1 -0
- package/src/components/accordion/demos/multiple.demo.tsx +1 -0
- package/src/components/accordion/demos/overview.demo.tsx +1 -0
- package/src/components/anchor/README.md +11 -3
- package/src/components/anchor/anchor.ts +54 -13
- package/src/components/breadcrumbs/{demos/basic.demo.tsx → basic.demo.tsx} +1 -0
- package/src/components/breadcrumbs/breadcrumbs.tsx +1 -1
- package/src/components/breadcrumbs/{demos/separator.demo.tsx → separator.demo.tsx} +1 -0
- package/src/components/button/button.tsx +30 -18
- package/src/components/button/demos/aliases.demo.tsx +1 -0
- package/src/components/button/demos/basic.demo.tsx +1 -0
- package/src/components/button/demos/states.demo.tsx +1 -0
- package/src/components/combobox/README.md +1 -1
- package/src/components/combobox/combobox.tsx +30 -12
- package/src/components/combobox/{demos/overview.demo.tsx → overview.demo.tsx} +1 -0
- package/src/components/glyph/glyph.tsx +2 -2
- package/src/components/listbox/listbox.ts +88 -83
- package/src/components/listbox/{demos/overview.demo.tsx → overview.demo.tsx} +1 -0
- package/src/components/menu/README.md +26 -2
- package/src/components/menu/demos/bubbling.demo.tsx +1 -0
- package/src/components/menu/demos/context-trigger.demo.tsx +133 -0
- package/src/components/menu/demos/overview.demo.tsx +1 -0
- package/src/components/menu/menu.tsx +100 -16
- package/src/components/popover/{demos/overview.demo.tsx → overview.demo.tsx} +1 -0
- package/src/components/popover/popover.ts +101 -81
- package/src/components/select/{demos/deconstructed.demo.tsx → deconstructed.demo.tsx} +1 -0
- package/src/components/select/{demos/overview.demo.tsx → overview.demo.tsx} +1 -0
- package/src/components/select/select.tsx +27 -10
- package/src/index.ts +1 -0
- package/src/runtime/client-entries.ts +1 -5
- package/src/runtime/component.ts +37 -15
- package/src/runtime/core/attributes.ts +21 -0
- package/src/runtime/core/props.ts +6 -4
- package/src/runtime/demos/basic.demo.tsx +21 -0
- package/src/runtime/demos/controlled-uncontrolled-values.demo.tsx +177 -0
- package/src/runtime/demos/keyed-list.demo.tsx +94 -0
- package/src/runtime/demos/readme.demo.tsx +702 -0
- package/src/runtime/diff-dom.ts +270 -20
- package/src/runtime/dom.ts +16 -9
- package/src/runtime/frame.ts +218 -41
- package/src/runtime/jsx.ts +7 -11
- package/src/runtime/mixins/link-mixin.ts +88 -86
- package/src/runtime/mixins/mixin.ts +9 -1
- package/src/runtime/mixins/ref-mixin.ts +4 -5
- package/src/runtime/reconcile.ts +23 -14
- package/src/runtime/scheduler.ts +20 -20
- package/src/runtime/svg-attributes.ts +1 -0
- package/src/runtime/to-vnode.ts +2 -2
- package/src/runtime/vnode.ts +10 -0
- package/src/server/README.md +4 -2
- package/src/server/stream.ts +84 -10
- package/src/style/css-mixin.ts +6 -1
- package/src/style/index.ts +1 -2
- package/src/style/style.ts +29 -10
- package/src/style/stylesheet.ts +14 -2
- package/src/theme/contract.ts +37 -5
- package/src/theme/glyph-contract.ts +3 -1
- package/src/theme/presets/rmx-01/index.ts +4 -2
- package/src/utils/scroll-lock.ts +7 -3
- package/dist/components/breadcrumbs/demos/basic.demo.js.map +0 -1
- package/dist/components/breadcrumbs/demos/separator.demo.js.map +0 -1
- package/dist/components/combobox/demos/overview.demo.js.map +0 -1
- package/dist/components/listbox/demos/overview.demo.js.map +0 -1
- package/dist/components/popover/demos/overview.demo.js.map +0 -1
- package/dist/components/select/demos/deconstructed.demo.js.map +0 -1
- package/dist/components/select/demos/overview.demo.js.map +0 -1
|
@@ -67,9 +67,9 @@ export type TabsPanelProps = Props<'div'> & {
|
|
|
67
67
|
};
|
|
68
68
|
declare function TabsProvider(handle: Handle<TabsContextProps, TabsContextValue>): () => RemixNode;
|
|
69
69
|
export declare const Context: typeof TabsProvider;
|
|
70
|
-
export declare const list:
|
|
71
|
-
export declare const panel:
|
|
72
|
-
export declare const trigger:
|
|
70
|
+
export declare const list: import("@remix-run/ui").MixinFactory<HTMLElement, [], ElementProps>;
|
|
71
|
+
export declare const panel: import("@remix-run/ui").MixinFactory<HTMLElement, [options: TabsPanelOptions], ElementProps>;
|
|
72
|
+
export declare const trigger: import("@remix-run/ui").MixinFactory<HTMLElement, [options: TabsTriggerOptions], ElementProps>;
|
|
73
73
|
export declare function onTabsChange<target extends HTMLElement>(handler: TabsChangeHandler<target>, captureBoolean?: boolean): import("@remix-run/ui").MixinDescriptor<target, ["rmx:tabs-change", (event: import("../../runtime/event-listeners.ts").EnsureEvent<import("../../runtime/event-listeners.ts").EventMap<target>["rmx:tabs-change"], target>, signal: AbortSignal) => void | Promise<void>, (boolean | undefined)?], ElementProps>;
|
|
74
74
|
export declare function Tabs(handle: Handle<TabsProps>): () => import("@remix-run/ui").RemixElement;
|
|
75
75
|
export declare function TabsList(handle: Handle<TabsListProps>): () => import("@remix-run/ui").RemixElement;
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export { createElement } from './runtime/create-element.ts';
|
|
|
13
13
|
export type { ElementType, ElementProps, RemixElement, Renderable, RemixNode, Props, } from './runtime/jsx.ts';
|
|
14
14
|
export type { HostProps, LayoutAnimationConfig } from './runtime/dom.ts';
|
|
15
15
|
export { createMixin } from './runtime/mixins/mixin.ts';
|
|
16
|
-
export type { MixinDescriptor, MixinHandle, MixinType, MixInput, MixValue, } from './runtime/mixins/mixin.ts';
|
|
16
|
+
export type { MixinDescriptor, MixinFactory, MixinHandle, MixinType, MixInput, MixValue, } from './runtime/mixins/mixin.ts';
|
|
17
17
|
export { TypedEventTarget } from './runtime/typed-event-target.ts';
|
|
18
18
|
export { addEventListeners } from './runtime/event-listeners.ts';
|
|
19
19
|
export type { Dispatched } from './runtime/event-listeners.ts';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,cAAc;AACd,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAItC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAQhF,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAUzD,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAYxD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAU3D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,cAAc;AACd,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAItC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAQhF,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAUzD,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAYxD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAU3D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AASvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,EAAE,EAAE,MAAM,8BAA8B,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAA;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAG1C,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const onKeyDown:
|
|
1
|
+
export declare const onKeyDown: import("@remix-run/ui").MixinFactory<HTMLElement, [key: string, handler: (event: KeyboardEvent) => void], import("@remix-run/ui").ElementProps>;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
type InsideTargetMatcher = (target: Node) => boolean;
|
|
2
|
+
declare const onOutsideClick: import("@remix-run/ui").MixinFactory<HTMLElement, [active: boolean, handler: (target: Node | null) => void, isInsideTarget?: InsideTargetMatcher | undefined, stopPropagation?: boolean | undefined], import("@remix-run/ui").ElementProps>;
|
|
2
3
|
export { onOutsideClick };
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type ElementProps } from '@remix-run/ui';
|
|
2
2
|
export type SearchValue = string | string[];
|
|
3
|
-
|
|
3
|
+
type HiddenTypeaheadHandler = (text: string) => void;
|
|
4
|
+
export declare const hiddenTypeahead: import("@remix-run/ui").MixinFactory<HTMLElement, [onTypeahead: HiddenTypeaheadHandler], ElementProps>;
|
|
4
5
|
export declare function itemMatchesSearchText<item>(item: item, text: string, getSearchValues: (item: item) => SearchValue): boolean;
|
|
5
6
|
export declare function matchNextItemBySearchText<item>(text: string, items: item[], options: {
|
|
6
7
|
fromIndex: number;
|
|
7
8
|
getSearchValues: (item: item) => SearchValue;
|
|
8
9
|
}): item | null;
|
|
10
|
+
export {};
|
|
@@ -34,7 +34,7 @@ export type EntryMetadata = {
|
|
|
34
34
|
/**
|
|
35
35
|
* An entry component preserves the exact function type with added metadata
|
|
36
36
|
*/
|
|
37
|
-
export type EntryComponent<props extends SerializableProps = {}, context = NoContext> = ((handle: Handle<props, context>) => RenderFn
|
|
37
|
+
export type EntryComponent<props extends SerializableProps = {}, context = NoContext> = ((handle: Handle<props, context>) => RenderFn) & EntryMetadata;
|
|
38
38
|
/**
|
|
39
39
|
* Marks a component as a client entry for client-side hydration.
|
|
40
40
|
*
|
|
@@ -68,7 +68,6 @@ export type EntryComponent<props extends SerializableProps = {}, context = NoCon
|
|
|
68
68
|
* ```
|
|
69
69
|
*/
|
|
70
70
|
export declare function clientEntry<props extends SerializableProps = {}, context = NoContext>(entryId: string, component: (handle: Handle<props, context>) => RenderFn): EntryComponent<props, context>;
|
|
71
|
-
export declare function clientEntry<props extends SerializableProps = {}, context = NoContext>(entryId: string, component: (handle: Handle<Record<string, never>, context>) => RenderFn<props>): EntryComponent<props, context>;
|
|
72
71
|
/**
|
|
73
72
|
* Type guard to check if a component is an entry component
|
|
74
73
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-entries.js","sourceRoot":"","sources":["../../src/runtime/client-entries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client-entries.js","sourceRoot":"","sources":["../../src/runtime/client-entries.ts"],"names":[],"mappings":"AAyFA,iBAAiB;AACjB,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,SAAc;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IAED,4CAA4C;IAC5C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAA;IAE5B,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,SAAkB;IACxC,OAAO,OAAO,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,UAAU,IAAK,SAAiB,CAAC,MAAM,KAAK,IAAI,CAAC,CAAA;AACpG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAG,GAAU;IAChD,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,GAAG,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,OAAO,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QACvD,MAAM,GAAG,MAAM,CAAC,WAAW,CAAA;IAC7B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -98,13 +98,18 @@ export type Component<Props = ElementProps, ContextValue = NoContext> = (handle:
|
|
|
98
98
|
export type ContextFrom<ComponentType> = ComponentType extends Component<any, infer Provided> ? Provided : ComponentType extends (handle: Handle<any, infer Provided>, ...args: any[]) => any ? Provided : never;
|
|
99
99
|
/**
|
|
100
100
|
* Context storage API exposed on component handles.
|
|
101
|
+
*
|
|
102
|
+
* Context values are keyed by provider component identity. `get(Component)`
|
|
103
|
+
* reads the nearest ancestor instance whose component function is exactly
|
|
104
|
+
* `Component`, so nested instances of the same provider shadow outer instances
|
|
105
|
+
* while different component types remain independent.
|
|
101
106
|
*/
|
|
102
107
|
export interface Context<C> {
|
|
103
108
|
/** Replaces the current context value for this component instance. */
|
|
104
109
|
set(values: C): void;
|
|
105
|
-
/** Reads the context value
|
|
110
|
+
/** Reads the context value from the nearest ancestor instance of the given component type. */
|
|
106
111
|
get<ComponentType>(component: ComponentType): ContextFrom<ComponentType>;
|
|
107
|
-
/** Reads
|
|
112
|
+
/** Reads an unknown context value for an untyped lookup. */
|
|
108
113
|
get(component: ElementType | symbol): unknown | undefined;
|
|
109
114
|
}
|
|
110
115
|
/**
|
|
@@ -145,9 +150,9 @@ export interface FrameProps {
|
|
|
145
150
|
*/
|
|
146
151
|
export type ComponentFn<Props = Record<string, never>, ContextValue = NoContext> = (handle: Handle<Props, ContextValue>) => RenderFn;
|
|
147
152
|
/**
|
|
148
|
-
*
|
|
153
|
+
* Zero-argument render function returned by a component factory.
|
|
149
154
|
*/
|
|
150
|
-
export type RenderFn
|
|
155
|
+
export type RenderFn = () => RemixNode;
|
|
151
156
|
export type { RemixNode } from './jsx.ts';
|
|
152
157
|
/**
|
|
153
158
|
* Props accepted by the built-in {@link Fragment} component.
|
|
@@ -181,37 +186,35 @@ type ComponentConfig = {
|
|
|
181
186
|
/**
|
|
182
187
|
* Runtime handle returned by {@link createComponent}.
|
|
183
188
|
*/
|
|
184
|
-
export
|
|
189
|
+
export interface ComponentHandle<C = NoContext> {
|
|
190
|
+
frame: FrameHandle;
|
|
191
|
+
render(nextProps: ElementProps): [RemixNode, Array<() => void>];
|
|
192
|
+
remove(): Array<() => void>;
|
|
193
|
+
setScheduleUpdate(nextScheduleUpdate: () => void): void;
|
|
194
|
+
getContextValue(): C | undefined;
|
|
195
|
+
isRemoved(): boolean;
|
|
196
|
+
}
|
|
185
197
|
/**
|
|
186
198
|
* Creates the internal runtime wrapper for a component instance.
|
|
187
199
|
*
|
|
188
200
|
* @param config Component runtime configuration.
|
|
189
201
|
* @returns Component runtime helpers used by the reconciler.
|
|
190
202
|
*/
|
|
191
|
-
export declare function createComponent<C = NoContext>(config: ComponentConfig):
|
|
192
|
-
declare class ComponentRuntime<C = NoContext> {
|
|
193
|
-
#private;
|
|
194
|
-
frame: FrameHandle;
|
|
195
|
-
constructor(config: ComponentConfig);
|
|
196
|
-
render: (nextProps: ElementProps) => [RemixNode, Array<() => void>];
|
|
197
|
-
remove: () => Array<() => void>;
|
|
198
|
-
setScheduleUpdate: (nextScheduleUpdate: () => void) => void;
|
|
199
|
-
getContextValue: () => C | undefined;
|
|
200
|
-
}
|
|
203
|
+
export declare function createComponent<C = NoContext>(config: ComponentConfig): ComponentHandle<C>;
|
|
201
204
|
/**
|
|
202
205
|
* Built-in component used to render nested frame content.
|
|
203
206
|
*
|
|
204
207
|
* @param handle Component handle for the frame instance.
|
|
205
208
|
* @returns A placeholder render function handled by the reconciler.
|
|
206
209
|
*/
|
|
207
|
-
export declare function Frame(handle: Handle<FrameProps, FrameHandle>):
|
|
210
|
+
export declare function Frame(handle: Handle<FrameProps, FrameHandle>): RenderFn;
|
|
208
211
|
/**
|
|
209
212
|
* Built-in component used to group children without adding a host element.
|
|
210
213
|
*
|
|
211
214
|
* @param handle Component handle for the fragment instance.
|
|
212
215
|
* @returns A placeholder render function handled by the reconciler.
|
|
213
216
|
*/
|
|
214
|
-
export declare function Fragment(handle: Handle<FragmentProps>):
|
|
217
|
+
export declare function Fragment(handle: Handle<FragmentProps>): RenderFn;
|
|
215
218
|
/**
|
|
216
219
|
* Creates a frame handle with default no-op implementations for testing and internal wiring.
|
|
217
220
|
*
|
|
@@ -17,6 +17,7 @@ class ComponentRuntime {
|
|
|
17
17
|
#props = {};
|
|
18
18
|
#renderController;
|
|
19
19
|
#renderFn;
|
|
20
|
+
#removed = false;
|
|
20
21
|
#scheduleUpdate = () => {
|
|
21
22
|
throw new Error('scheduleUpdate not implemented');
|
|
22
23
|
};
|
|
@@ -27,7 +28,7 @@ class ComponentRuntime {
|
|
|
27
28
|
this.#handle = this.#createHandle();
|
|
28
29
|
}
|
|
29
30
|
render = (nextProps) => {
|
|
30
|
-
if (this.#
|
|
31
|
+
if (this.#removed) {
|
|
31
32
|
console.warn('render called after component was removed, potential application memory leak');
|
|
32
33
|
return [null, []];
|
|
33
34
|
}
|
|
@@ -43,17 +44,21 @@ class ComponentRuntime {
|
|
|
43
44
|
renderFn = result;
|
|
44
45
|
this.#renderFn = renderFn;
|
|
45
46
|
}
|
|
46
|
-
return [renderFn(
|
|
47
|
+
return [renderFn(), this.#dequeueTasks()];
|
|
47
48
|
};
|
|
48
49
|
remove = () => {
|
|
50
|
+
if (this.#removed)
|
|
51
|
+
return [];
|
|
52
|
+
this.#removed = true;
|
|
49
53
|
this.#connectedController?.abort();
|
|
50
54
|
this.#abortRenderSignal();
|
|
51
|
-
return this.#dequeueTasks();
|
|
55
|
+
return this.#dequeueTasks(AbortSignal.abort());
|
|
52
56
|
};
|
|
53
57
|
setScheduleUpdate = (nextScheduleUpdate) => {
|
|
54
58
|
this.#scheduleUpdate = nextScheduleUpdate;
|
|
55
59
|
};
|
|
56
60
|
getContextValue = () => this.#contextValue;
|
|
61
|
+
isRemoved = () => this.#removed;
|
|
57
62
|
#createHandle() {
|
|
58
63
|
let component = this;
|
|
59
64
|
let context = {
|
|
@@ -66,6 +71,10 @@ class ComponentRuntime {
|
|
|
66
71
|
id: this.#config.id,
|
|
67
72
|
props: this.#props,
|
|
68
73
|
update: () => new Promise((resolve) => {
|
|
74
|
+
if (component.#removed) {
|
|
75
|
+
resolve(AbortSignal.abort());
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
69
78
|
this.#tasks.push((signal) => resolve(signal));
|
|
70
79
|
this.#scheduleUpdate();
|
|
71
80
|
}),
|
|
@@ -95,12 +104,12 @@ class ComponentRuntime {
|
|
|
95
104
|
this.#renderController?.abort();
|
|
96
105
|
this.#renderController = undefined;
|
|
97
106
|
}
|
|
98
|
-
#dequeueTasks() {
|
|
99
|
-
let needsSignal = this.#tasks.some((task) => task.length >= 1);
|
|
107
|
+
#dequeueTasks(signal) {
|
|
108
|
+
let needsSignal = signal === undefined && this.#tasks.some((task) => task.length >= 1);
|
|
100
109
|
if (needsSignal) {
|
|
101
110
|
this.#renderController ??= new AbortController();
|
|
102
111
|
}
|
|
103
|
-
|
|
112
|
+
signal ??= this.#renderController?.signal;
|
|
104
113
|
let tasks = this.#tasks.splice(0, this.#tasks.length);
|
|
105
114
|
return tasks.map((task) => () => task(signal));
|
|
106
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/runtime/component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/runtime/component.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,13 @@ import type { ElementProps } from '../jsx.ts';
|
|
|
2
2
|
export declare const FRAMEWORK_PROPS: Set<string>;
|
|
3
3
|
export declare const SELF_CLOSING_TAGS: Set<string>;
|
|
4
4
|
export declare function isChildlessElement(name: string): boolean;
|
|
5
|
-
export declare function canUseProperty(element: Element, name: string, isSvg: boolean): element is Element & Record<string, unknown>;
|
|
5
|
+
export declare function canUseProperty(element: Element, name: string, isSvg: boolean, attr: string): element is Element & Record<string, unknown>;
|
|
6
6
|
export declare function normalizeAttributeName(name: string, isSvg: boolean): {
|
|
7
7
|
ns?: string;
|
|
8
8
|
attr: string;
|
|
9
9
|
};
|
|
10
|
+
export declare function isBooleanishStringAttribute(name: string): boolean;
|
|
11
|
+
export declare function shouldStringifyBooleanAttribute(name: string): boolean;
|
|
10
12
|
export declare function serializeStyleObject(style: Record<string, unknown>): string;
|
|
11
13
|
export declare function getMergedClassName(props: ElementProps): string | undefined;
|
|
12
14
|
export declare function toKebabCase(value: string): string;
|
|
@@ -12,6 +12,16 @@ const ATTRIBUTE_FALLBACK_NAMES = new Set([
|
|
|
12
12
|
'colSpan',
|
|
13
13
|
'role',
|
|
14
14
|
'popover',
|
|
15
|
+
'translate',
|
|
16
|
+
]);
|
|
17
|
+
const BOOLEANISH_STRING_ATTRIBUTES = new Set([
|
|
18
|
+
'autoReverse',
|
|
19
|
+
'contenteditable',
|
|
20
|
+
'draggable',
|
|
21
|
+
'externalResourcesRequired',
|
|
22
|
+
'focusable',
|
|
23
|
+
'preserveAlpha',
|
|
24
|
+
'spellcheck',
|
|
15
25
|
]);
|
|
16
26
|
export const FRAMEWORK_PROPS = new Set(['children', 'mix', 'key', 'animate', 'innerHTML', 'on']);
|
|
17
27
|
export const SELF_CLOSING_TAGS = new Set([
|
|
@@ -33,11 +43,13 @@ export const SELF_CLOSING_TAGS = new Set([
|
|
|
33
43
|
export function isChildlessElement(name) {
|
|
34
44
|
return SELF_CLOSING_TAGS.has(name);
|
|
35
45
|
}
|
|
36
|
-
export function canUseProperty(element, name, isSvg) {
|
|
46
|
+
export function canUseProperty(element, name, isSvg, attr) {
|
|
37
47
|
if (isSvg)
|
|
38
48
|
return false;
|
|
39
49
|
if (ATTRIBUTE_FALLBACK_NAMES.has(name))
|
|
40
50
|
return false;
|
|
51
|
+
if (isBooleanishStringAttribute(attr))
|
|
52
|
+
return false;
|
|
41
53
|
return name in element;
|
|
42
54
|
}
|
|
43
55
|
export function normalizeAttributeName(name, isSvg) {
|
|
@@ -58,6 +70,12 @@ export function normalizeAttributeName(name, isSvg) {
|
|
|
58
70
|
}
|
|
59
71
|
return normalizeSvgAttribute(name);
|
|
60
72
|
}
|
|
73
|
+
export function isBooleanishStringAttribute(name) {
|
|
74
|
+
return BOOLEANISH_STRING_ATTRIBUTES.has(name);
|
|
75
|
+
}
|
|
76
|
+
export function shouldStringifyBooleanAttribute(name) {
|
|
77
|
+
return isBooleanishStringAttribute(name) || name === 'value';
|
|
78
|
+
}
|
|
61
79
|
export function serializeStyleObject(style) {
|
|
62
80
|
let parts = [];
|
|
63
81
|
for (let [key, value] of Object.entries(style)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../src/runtime/core/attributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAG5D,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,MAAM;IACN,SAAS;
|
|
1
|
+
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../src/runtime/core/attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { canUseProperty, getMergedClassName, normalizeAttributeName, serializeStyleObject, toKebabCase, } from "./attributes.js";
|
|
1
|
+
import { canUseProperty, getMergedClassName, isBooleanishStringAttribute, normalizeAttributeName, serializeStyleObject, toKebabCase, } from "./attributes.js";
|
|
2
2
|
import { normalizeCssValue } from "../../style/style.js";
|
|
3
3
|
const SVG_NS = 'http://www.w3.org/2000/svg';
|
|
4
4
|
function isFrameworkProp(name) {
|
|
@@ -57,10 +57,10 @@ export function patchHostProps(curr, next, dom) {
|
|
|
57
57
|
continue;
|
|
58
58
|
if (name in next && next[name] != null)
|
|
59
59
|
continue;
|
|
60
|
-
|
|
60
|
+
let { ns, attr } = normalizeAttributeName(name, isSvg);
|
|
61
|
+
if (canUseProperty(dom, name, isSvg, attr)) {
|
|
61
62
|
clearRuntimePropertyOnRemoval(dom, name);
|
|
62
63
|
}
|
|
63
|
-
let { ns, attr } = normalizeAttributeName(name, isSvg);
|
|
64
64
|
if (ns)
|
|
65
65
|
dom.removeAttributeNS(ns, toLocalName(attr));
|
|
66
66
|
else
|
|
@@ -100,7 +100,7 @@ function patchHostProp(dom, name, value, isSvg) {
|
|
|
100
100
|
dom.setAttribute('style', value);
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
|
-
if (canUseProperty(dom, name, isSvg)) {
|
|
103
|
+
if (canUseProperty(dom, name, isSvg, attr)) {
|
|
104
104
|
try {
|
|
105
105
|
dom[name] = value == null ? '' : value;
|
|
106
106
|
return;
|
|
@@ -110,7 +110,8 @@ function patchHostProp(dom, name, value, isSvg) {
|
|
|
110
110
|
if (typeof value === 'function')
|
|
111
111
|
return;
|
|
112
112
|
let isAriaOrData = name.startsWith('aria-') || name.startsWith('data-');
|
|
113
|
-
|
|
113
|
+
let isBooleanishString = isBooleanishStringAttribute(attr);
|
|
114
|
+
if (value != null && (value !== false || isAriaOrData || isBooleanishString)) {
|
|
114
115
|
let attrValue = name === 'popover' && value === true ? '' : String(value);
|
|
115
116
|
if (ns)
|
|
116
117
|
dom.setAttributeNS(ns, attr, attrValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.js","sourceRoot":"","sources":["../../../src/runtime/core/props.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,MAAM,MAAM,GAAG,4BAA4B,CAAA;AAE3C,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CACL,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,IAAI,CACd,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,cAAc,KAAK,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAsC,EAAE,IAAY;IACzF,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACd,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3E,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;YACjB,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,IAAkB,EAAE,GAAY;IACjF,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,KAAK,MAAM,CAAA;IACvC,IAAI,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAE5C,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpC,IAAI,aAAa,EAAE,CAAC;YAClB,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,eAAe,CAAC,IAAI,CAAC;YAAE,SAAQ;QACnC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW;YAAE,SAAQ;QACtD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;YAAE,SAAQ;QAEhD,IAAI,
|
|
1
|
+
{"version":3,"file":"props.js","sourceRoot":"","sources":["../../../src/runtime/core/props.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,MAAM,MAAM,GAAG,4BAA4B,CAAA;AAE3C,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CACL,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,IAAI,CACd,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,cAAc,KAAK,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAsC,EAAE,IAAY;IACzF,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACd,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3E,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;YACjB,OAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,IAAkB,EAAE,GAAY;IACjF,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,KAAK,MAAM,CAAA;IACvC,IAAI,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAE5C,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpC,IAAI,aAAa,EAAE,CAAC;YAClB,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,eAAe,CAAC,IAAI,CAAC;YAAE,SAAQ;QACnC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW;YAAE,SAAQ;QACtD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;YAAE,SAAQ;QAEhD,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACtD,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3C,6BAA6B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1C,CAAC;QAED,IAAI,EAAE;YAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;;YAC/C,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,eAAe,CAAC,IAAI,CAAC;YAAE,SAAQ;QACnC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW;YAAE,SAAQ;QAEtD,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1B,IAAI,SAAS,IAAI,IAAI;YAAE,SAAQ;QAE/B,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1B,IAAI,SAAS,KAAK,SAAS;YAAE,SAAQ;QAErC,IAAI,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;gBAC5B,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;YAC7C,CAAC;YACD,SAAQ;QACV,CAAC;QAED,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAY,EAAE,IAAY,EAAE,KAAc,EAAE,KAAc;IAC/E,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAEtD,IAAI,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QACvC,OAAM;IACR,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAClD,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAChC,OAAM;IACR,CAAC;IAED,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;YACtC,OAAM;QACR,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAM;IAEvC,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACvE,IAAI,kBAAkB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,YAAY,IAAI,kBAAkB,CAAC,EAAE,CAAC;QAC7E,IAAI,SAAS,GAAG,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzE,IAAI,EAAE;YAAE,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;;YAC1C,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC;SAAM,CAAC;QACN,IAAI,EAAE;YAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;;YAC/C,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAY,EACZ,IAAyC,EACzC,IAA6B;IAE7B,IAAI,CAAC,CAAC,GAAG,YAAY,WAAW,IAAI,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QACrD,OAAM;IACR,CAAC;IAED,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAA;IACrB,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YACpD,IAAI,YAAY,KAAK,SAAS;gBAAE,SAAQ;YAExC,IAAI,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YACpD,IAAI,YAAY,KAAK,SAAS;gBAAE,SAAQ;YAExC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,IAAI,YAAY,KAAK,SAAS;YAAE,SAAQ;QAExC,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACvE,IAAI,YAAY,KAAK,YAAY;YAAE,SAAQ;QAE3C,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAA;IACpD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAc;IACnD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAA;IACnC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAE1E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "@remix-run/ui/jsx-runtime";
|
|
2
|
+
import { on } from '@remix-run/ui';
|
|
3
|
+
/**
|
|
4
|
+
* @name Basic Counter
|
|
5
|
+
* @description The smallest interactive Remix UI counter from the standalone demos.
|
|
6
|
+
*/
|
|
7
|
+
export default function App(handle) {
|
|
8
|
+
let count = 0;
|
|
9
|
+
return () => (_jsxs("button", { mix: [
|
|
10
|
+
on('click', () => {
|
|
11
|
+
count++;
|
|
12
|
+
handle.update();
|
|
13
|
+
}),
|
|
14
|
+
], children: ["Ye ol' counter: ", count] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=basic.demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.demo.js","sourceRoot":"","sources":["../../../src/runtime/demos/basic.demo.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,eAAe,CAAA;AAE/C;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAAc;IACxC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,GAAG,EAAE,CAAC,CACX,kBACE,GAAG,EAAE;YACH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACf,KAAK,EAAE,CAAA;gBACP,MAAM,CAAC,MAAM,EAAE,CAAA;YACjB,CAAC,CAAC;SACH,iCAEgB,KAAK,IACf,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Handle } from '@remix-run/ui';
|
|
2
|
+
/**
|
|
3
|
+
* @name Controlled and Uncontrolled Values
|
|
4
|
+
* @description Compares controlled props with uncontrolled DOM values across rerenders and remounts.
|
|
5
|
+
*/
|
|
6
|
+
export default function App(handle: Handle): () => import("@remix-run/ui").RemixElement;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@remix-run/ui/jsx-runtime";
|
|
2
|
+
import { on } from '@remix-run/ui';
|
|
3
|
+
/**
|
|
4
|
+
* @name Controlled and Uncontrolled Values
|
|
5
|
+
* @description Compares controlled props with uncontrolled DOM values across rerenders and remounts.
|
|
6
|
+
*/
|
|
7
|
+
export default function App(handle) {
|
|
8
|
+
let controlledText = 'hello';
|
|
9
|
+
let controlledChecked = true;
|
|
10
|
+
let controlledChoice = 'alpha';
|
|
11
|
+
let uncontrolledTextSnapshot = 'type to update this';
|
|
12
|
+
let uncontrolledCheckedSnapshot = true;
|
|
13
|
+
let renderCount = 0;
|
|
14
|
+
let uncontrolledVersion = 0;
|
|
15
|
+
let rerender = () => {
|
|
16
|
+
renderCount++;
|
|
17
|
+
handle.update();
|
|
18
|
+
};
|
|
19
|
+
let resetControlled = () => {
|
|
20
|
+
controlledText = 'hello';
|
|
21
|
+
controlledChecked = true;
|
|
22
|
+
controlledChoice = 'alpha';
|
|
23
|
+
rerender();
|
|
24
|
+
};
|
|
25
|
+
let remountUncontrolled = () => {
|
|
26
|
+
uncontrolledVersion++;
|
|
27
|
+
uncontrolledTextSnapshot = 'type to update this';
|
|
28
|
+
uncontrolledCheckedSnapshot = true;
|
|
29
|
+
rerender();
|
|
30
|
+
};
|
|
31
|
+
return () => (_jsxs("main", { style: {
|
|
32
|
+
fontFamily: 'system-ui, sans-serif',
|
|
33
|
+
maxWidth: '860px',
|
|
34
|
+
margin: '24px auto',
|
|
35
|
+
padding: '0 16px',
|
|
36
|
+
lineHeight: 1.45,
|
|
37
|
+
}, children: [_jsx("h1", { children: "Controlled vs Uncontrolled Values" }), _jsxs("p", { children: ["Render count: ", _jsx("strong", { children: renderCount })] }), _jsxs("div", { style: { display: 'flex', gap: '10px', marginBottom: '18px' }, children: [_jsx("button", { mix: [on('click', rerender)], children: "Force Re-render" }), _jsx("button", { mix: [on('click', resetControlled)], children: "Reset Controlled" }), _jsx("button", { mix: [on('click', remountUncontrolled)], children: "Remount Uncontrolled" })] }), _jsxs("section", { style: {
|
|
38
|
+
border: '1px solid #d0d7de',
|
|
39
|
+
borderRadius: '8px',
|
|
40
|
+
padding: '12px',
|
|
41
|
+
marginBottom: '12px',
|
|
42
|
+
}, children: [_jsx("h2", { children: "Controlled" }), _jsx("p", { children: "These values come from component state. The text input allows everything except digits, and invalid input does not call update." }), _jsxs("label", { style: { display: 'block', marginBottom: '8px' }, children: ["Text:", _jsx("input", { style: { marginLeft: '8px' }, value: controlledText, mix: [
|
|
43
|
+
on('input', (event) => {
|
|
44
|
+
let nextValue = event.currentTarget.value;
|
|
45
|
+
if (/\d/.test(nextValue)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
controlledText = nextValue;
|
|
49
|
+
rerender();
|
|
50
|
+
}),
|
|
51
|
+
] })] }), _jsxs("label", { style: { display: 'block', marginBottom: '8px' }, children: [_jsx("input", { type: "checkbox", checked: controlledChecked, mix: [
|
|
52
|
+
on('change', (event) => {
|
|
53
|
+
controlledChecked = event.currentTarget.checked;
|
|
54
|
+
rerender();
|
|
55
|
+
}),
|
|
56
|
+
] }), ' ', "Checked"] }), _jsxs("label", { style: { display: 'block', marginBottom: '8px' }, children: ["Choice:", _jsxs("select", { style: { marginLeft: '8px' }, value: controlledChoice, mix: [
|
|
57
|
+
on('change', (event) => {
|
|
58
|
+
controlledChoice = event.currentTarget.value;
|
|
59
|
+
rerender();
|
|
60
|
+
}),
|
|
61
|
+
], children: [_jsx("option", { value: "alpha", children: "Alpha" }), _jsx("option", { value: "beta", children: "Beta" }), _jsx("option", { value: "gamma", children: "Gamma" })] })] }), _jsxs("div", { children: ["State snapshot: text=", _jsx("code", { children: JSON.stringify(controlledText) }), ", checked=", _jsx("code", { children: String(controlledChecked) }), ", choice=", _jsx("code", { children: JSON.stringify(controlledChoice) })] })] }), _jsxs("section", { style: {
|
|
62
|
+
border: '1px solid #d0d7de',
|
|
63
|
+
borderRadius: '8px',
|
|
64
|
+
padding: '12px',
|
|
65
|
+
}, children: [_jsx("h2", { children: "Uncontrolled" }), _jsxs("p", { children: ["These initialize from ", _jsx("code", { children: "defaultValue/defaultChecked" }), " once and then keep their own DOM state."] }), _jsxs("label", { style: { display: 'block', marginBottom: '8px' }, children: ["Text:", _jsx("input", { style: { marginLeft: '8px' }, defaultValue: "type to update this", mix: [
|
|
66
|
+
on('input', (event) => {
|
|
67
|
+
uncontrolledTextSnapshot = event.currentTarget.value;
|
|
68
|
+
rerender();
|
|
69
|
+
}),
|
|
70
|
+
] })] }), _jsxs("label", { style: { display: 'block', marginBottom: '8px' }, children: [_jsx("input", { type: "checkbox", defaultChecked: true, mix: [
|
|
71
|
+
on('change', (event) => {
|
|
72
|
+
uncontrolledCheckedSnapshot = event.currentTarget.checked;
|
|
73
|
+
rerender();
|
|
74
|
+
}),
|
|
75
|
+
] }), ' ', "Checked"] }), _jsxs("div", { children: ["Last DOM snapshot: text=", _jsx("code", { children: JSON.stringify(uncontrolledTextSnapshot) }), ", checked=", _jsx("code", { children: String(uncontrolledCheckedSnapshot) })] })] }, `uncontrolled-${uncontrolledVersion}`)] }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=controlled-uncontrolled-values.demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled-uncontrolled-values.demo.js","sourceRoot":"","sources":["../../../src/runtime/demos/controlled-uncontrolled-values.demo.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@remix-run/ui/jsx-runtime";
|
|
2
|
+
import { on } from '@remix-run/ui';
|
|
3
|
+
/**
|
|
4
|
+
* @name Keyed List
|
|
5
|
+
* @description Exercises keyed DOM reconciliation with shuffling, reversing, and per-item controls.
|
|
6
|
+
*/
|
|
7
|
+
export default function App(handle) {
|
|
8
|
+
let items = [
|
|
9
|
+
{ id: 'a', label: 'Item A' },
|
|
10
|
+
{ id: 'b', label: 'Item B' },
|
|
11
|
+
{ id: 'c', label: 'Item C' },
|
|
12
|
+
{ id: 'd', label: 'Item D' },
|
|
13
|
+
];
|
|
14
|
+
let shuffleInterval = null;
|
|
15
|
+
let moveUp = (index) => {
|
|
16
|
+
if (index === 0)
|
|
17
|
+
return;
|
|
18
|
+
let newItems = [...items];
|
|
19
|
+
[newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]];
|
|
20
|
+
items = newItems;
|
|
21
|
+
handle.update();
|
|
22
|
+
};
|
|
23
|
+
let moveDown = (index) => {
|
|
24
|
+
if (index === items.length - 1)
|
|
25
|
+
return;
|
|
26
|
+
let newItems = [...items];
|
|
27
|
+
[newItems[index], newItems[index + 1]] = [newItems[index + 1], newItems[index]];
|
|
28
|
+
items = newItems;
|
|
29
|
+
handle.update();
|
|
30
|
+
};
|
|
31
|
+
let reverse = () => {
|
|
32
|
+
items = [...items].reverse();
|
|
33
|
+
handle.update();
|
|
34
|
+
};
|
|
35
|
+
let shuffle = () => {
|
|
36
|
+
let newItems = [...items];
|
|
37
|
+
for (let i = newItems.length - 1; i > 0; i--) {
|
|
38
|
+
let j = Math.floor(Math.random() * (i + 1));
|
|
39
|
+
[newItems[i], newItems[j]] = [newItems[j], newItems[i]];
|
|
40
|
+
}
|
|
41
|
+
items = newItems;
|
|
42
|
+
handle.update();
|
|
43
|
+
};
|
|
44
|
+
let toggleAutoShuffle = () => {
|
|
45
|
+
if (shuffleInterval !== null) {
|
|
46
|
+
clearInterval(shuffleInterval);
|
|
47
|
+
shuffleInterval = null;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
shuffleInterval = setInterval(() => {
|
|
51
|
+
shuffle();
|
|
52
|
+
}, 1000);
|
|
53
|
+
}
|
|
54
|
+
handle.update();
|
|
55
|
+
};
|
|
56
|
+
return () => (_jsxs("div", { children: [_jsxs("div", { className: "controls", children: [_jsx("button", { mix: [on('click', reverse)], children: "Reverse List" }), _jsx("button", { mix: [on('click', shuffle)], children: "Shuffle List" }), _jsx("button", { mix: [on('click', toggleAutoShuffle)], children: shuffleInterval !== null ? 'Stop Auto-Shuffle' : 'Start Auto-Shuffle' })] }), items.map((item, index) => (_jsxs("div", { className: "list-item", children: [_jsx("input", { type: "text", placeholder: item.label, defaultValue: item.label }), _jsx("button", {
|
|
57
|
+
// disabled={index === 0}
|
|
58
|
+
mix: [on('click', () => moveUp(index))], children: "\u2191" }), _jsx("button", {
|
|
59
|
+
// disabled={index === items.length - 1}
|
|
60
|
+
mix: [on('click', () => moveDown(index))], children: "\u2193" })] }, item.id)))] }));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=keyed-list.demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyed-list.demo.js","sourceRoot":"","sources":["../../../src/runtime/demos/keyed-list.demo.tsx"],"names":[],"mappings":"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"}
|