@aglyn/shared-ui-jsx 1.0.0-beta.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +7 -0
- package/package.json +63 -0
- package/src/index.d.ts +48 -0
- package/src/index.js +179 -0
- package/src/index.js.map +1 -0
- package/src/lib/components/aglyn-text.d.ts +86 -0
- package/src/lib/components/aglyn-text.js +44 -0
- package/src/lib/components/aglyn-text.js.map +1 -0
- package/src/lib/components/app-link.d.ts +74 -0
- package/src/lib/components/app-link.js +139 -0
- package/src/lib/components/app-link.js.map +1 -0
- package/src/lib/components/aspect-ratio.d.ts +59 -0
- package/src/lib/components/aspect-ratio.js +153 -0
- package/src/lib/components/aspect-ratio.js.map +1 -0
- package/src/lib/components/background-image.component.d.ts +30 -0
- package/src/lib/components/background-image.component.js +42 -0
- package/src/lib/components/background-image.component.js.map +1 -0
- package/src/lib/components/card-columns.d.ts +86 -0
- package/src/lib/components/card-columns.js +148 -0
- package/src/lib/components/card-columns.js.map +1 -0
- package/src/lib/components/card-display.d.ts +36 -0
- package/src/lib/components/card-display.js +158 -0
- package/src/lib/components/card-display.js.map +1 -0
- package/src/lib/components/card-list-item.d.ts +35 -0
- package/src/lib/components/card-list-item.js +137 -0
- package/src/lib/components/card-list-item.js.map +1 -0
- package/src/lib/components/children-function-prop.d.ts +25 -0
- package/src/lib/components/children-function-prop.js +29 -0
- package/src/lib/components/children-function-prop.js.map +1 -0
- package/src/lib/components/confirmation-provider.component.d.ts +19 -0
- package/src/lib/components/confirmation-provider.component.js +83 -0
- package/src/lib/components/confirmation-provider.component.js.map +1 -0
- package/src/lib/components/container.d.ts +25 -0
- package/src/lib/components/container.js +62 -0
- package/src/lib/components/container.js.map +1 -0
- package/src/lib/components/data-table.component.d.ts +54 -0
- package/src/lib/components/data-table.component.js +211 -0
- package/src/lib/components/data-table.component.js.map +1 -0
- package/src/lib/components/dialog-confirm.d.ts +36 -0
- package/src/lib/components/dialog-confirm.js +74 -0
- package/src/lib/components/dialog-confirm.js.map +1 -0
- package/src/lib/components/ellipsis-pulse.component.d.ts +22 -0
- package/src/lib/components/ellipsis-pulse.component.js +51 -0
- package/src/lib/components/ellipsis-pulse.component.js.map +1 -0
- package/src/lib/components/emotion-cache-provider.d.ts +31 -0
- package/src/lib/components/emotion-cache-provider.js +40 -0
- package/src/lib/components/emotion-cache-provider.js.map +1 -0
- package/src/lib/components/empty-state.component.d.ts +63 -0
- package/src/lib/components/empty-state.component.js +214 -0
- package/src/lib/components/empty-state.component.js.map +1 -0
- package/src/lib/components/error-boundary.component.d.ts +28 -0
- package/src/lib/components/error-boundary.component.js +86 -0
- package/src/lib/components/error-boundary.component.js.map +1 -0
- package/src/lib/components/grid-buttons.d.ts +26 -0
- package/src/lib/components/grid-buttons.js +45 -0
- package/src/lib/components/grid-buttons.js.map +1 -0
- package/src/lib/components/grid-items.d.ts +103 -0
- package/src/lib/components/grid-items.js +336 -0
- package/src/lib/components/grid-items.js.map +1 -0
- package/src/lib/components/grid-list.d.ts +37 -0
- package/src/lib/components/grid-list.js +156 -0
- package/src/lib/components/grid-list.js.map +1 -0
- package/src/lib/components/help-tip.component.d.ts +30 -0
- package/src/lib/components/help-tip.component.js +139 -0
- package/src/lib/components/help-tip.component.js.map +1 -0
- package/src/lib/components/link-navigation-reporter.d.ts +24 -0
- package/src/lib/components/link-navigation-reporter.js +64 -0
- package/src/lib/components/link-navigation-reporter.js.map +1 -0
- package/src/lib/components/list-pagination.component.d.ts +57 -0
- package/src/lib/components/list-pagination.component.js +90 -0
- package/src/lib/components/list-pagination.component.js.map +1 -0
- package/src/lib/components/list-table.component.d.ts +155 -0
- package/src/lib/components/list-table.component.js +369 -0
- package/src/lib/components/list-table.component.js.map +1 -0
- package/src/lib/components/loading-layout-app.component.d.ts +35 -0
- package/src/lib/components/loading-layout-app.component.js +42 -0
- package/src/lib/components/loading-layout-app.component.js.map +1 -0
- package/src/lib/components/loading-modal-overlay.d.ts +30 -0
- package/src/lib/components/loading-modal-overlay.js +156 -0
- package/src/lib/components/loading-modal-overlay.js.map +1 -0
- package/src/lib/components/loading-modal.d.ts +19 -0
- package/src/lib/components/loading-modal.js +113 -0
- package/src/lib/components/loading-modal.js.map +1 -0
- package/src/lib/components/loading-text.component.d.ts +21 -0
- package/src/lib/components/loading-text.component.js +40 -0
- package/src/lib/components/loading-text.component.js.map +1 -0
- package/src/lib/components/mdi-icon/index.d.ts +2 -0
- package/src/lib/components/mdi-icon/index.js +4 -0
- package/src/lib/components/mdi-icon/index.js.map +1 -0
- package/src/lib/components/mdi-icon/md-icon-stack.d.ts +31 -0
- package/src/lib/components/mdi-icon/md-icon-stack.js +101 -0
- package/src/lib/components/mdi-icon/md-icon-stack.js.map +1 -0
- package/src/lib/components/mdi-icon/md-icon.d.ts +32 -0
- package/src/lib/components/mdi-icon/md-icon.js +147 -0
- package/src/lib/components/mdi-icon/md-icon.js.map +1 -0
- package/src/lib/components/mdi-icon/mdi-icon-from-id.d.ts +23 -0
- package/src/lib/components/mdi-icon/mdi-icon-from-id.js +35 -0
- package/src/lib/components/mdi-icon/mdi-icon-from-id.js.map +1 -0
- package/src/lib/components/mdi-icon/mdi-icon.d.ts +24 -0
- package/src/lib/components/mdi-icon/mdi-icon.js +46 -0
- package/src/lib/components/mdi-icon/mdi-icon.js.map +1 -0
- package/src/lib/components/measured-figures.component.d.ts +64 -0
- package/src/lib/components/measured-figures.component.js +161 -0
- package/src/lib/components/measured-figures.component.js.map +1 -0
- package/src/lib/components/menu.d.ts +45 -0
- package/src/lib/components/menu.js +229 -0
- package/src/lib/components/menu.js.map +1 -0
- package/src/lib/components/mui-shadow-dom.d.ts +38 -0
- package/src/lib/components/mui-shadow-dom.js +161 -0
- package/src/lib/components/mui-shadow-dom.js.map +1 -0
- package/src/lib/components/navigation-drawer.component.d.ts +31 -0
- package/src/lib/components/navigation-drawer.component.js +76 -0
- package/src/lib/components/navigation-drawer.component.js.map +1 -0
- package/src/lib/components/navigation-intent.d.ts +18 -0
- package/src/lib/components/navigation-intent.js +56 -0
- package/src/lib/components/navigation-intent.js.map +1 -0
- package/src/lib/components/navigation-view/index.d.ts +18 -0
- package/src/lib/components/navigation-view/index.js +19 -0
- package/src/lib/components/navigation-view/index.js.map +1 -0
- package/src/lib/components/navigation-view/navigation-view.d.ts +35 -0
- package/src/lib/components/navigation-view/navigation-view.js +175 -0
- package/src/lib/components/navigation-view/navigation-view.js.map +1 -0
- package/src/lib/components/next-link.d.ts +27 -0
- package/src/lib/components/next-link.js +88 -0
- package/src/lib/components/next-link.js.map +1 -0
- package/src/lib/components/popper-styled.component.d.ts +25 -0
- package/src/lib/components/popper-styled.component.js +129 -0
- package/src/lib/components/popper-styled.component.js.map +1 -0
- package/src/lib/components/quota-readout.component.d.ts +69 -0
- package/src/lib/components/quota-readout.component.js +52 -0
- package/src/lib/components/quota-readout.component.js.map +1 -0
- package/src/lib/components/resizeable-stack.d.ts +4 -0
- package/src/lib/components/resizeable-stack.js +23 -0
- package/src/lib/components/resizeable-stack.js.map +1 -0
- package/src/lib/components/row-actions-menu.component.d.ts +53 -0
- package/src/lib/components/row-actions-menu.component.js +132 -0
- package/src/lib/components/row-actions-menu.component.js.map +1 -0
- package/src/lib/components/ruler-guides.component.d.ts +35 -0
- package/src/lib/components/ruler-guides.component.js +166 -0
- package/src/lib/components/ruler-guides.component.js.map +1 -0
- package/src/lib/components/sandbox-frame.d.ts +42 -0
- package/src/lib/components/sandbox-frame.js +122 -0
- package/src/lib/components/sandbox-frame.js.map +1 -0
- package/src/lib/components/scroll-reaction.d.ts +59 -0
- package/src/lib/components/scroll-reaction.js +43 -0
- package/src/lib/components/scroll-reaction.js.map +1 -0
- package/src/lib/components/scroll-table.component.d.ts +124 -0
- package/src/lib/components/scroll-table.component.js +103 -0
- package/src/lib/components/scroll-table.component.js.map +1 -0
- package/src/lib/components/shadow-dom/index.d.ts +18 -0
- package/src/lib/components/shadow-dom/index.js +19 -0
- package/src/lib/components/shadow-dom/index.js.map +1 -0
- package/src/lib/components/shadow-dom/shadow-dom.d.ts +42 -0
- package/src/lib/components/shadow-dom/shadow-dom.js +123 -0
- package/src/lib/components/shadow-dom/shadow-dom.js.map +1 -0
- package/src/lib/components/splash-screen.d.ts +33 -0
- package/src/lib/components/splash-screen.js +105 -0
- package/src/lib/components/splash-screen.js.map +1 -0
- package/src/lib/components/sr-only.d.ts +20 -0
- package/src/lib/components/sr-only.js +25 -0
- package/src/lib/components/sr-only.js.map +1 -0
- package/src/lib/components/status-screen-plain.component.d.ts +27 -0
- package/src/lib/components/status-screen-plain.component.js +178 -0
- package/src/lib/components/status-screen-plain.component.js.map +1 -0
- package/src/lib/components/usage-meter.component.d.ts +30 -0
- package/src/lib/components/usage-meter.component.js +92 -0
- package/src/lib/components/usage-meter.component.js.map +1 -0
- package/src/lib/components/variable-text-field.component.d.ts +50 -0
- package/src/lib/components/variable-text-field.component.js +188 -0
- package/src/lib/components/variable-text-field.component.js.map +1 -0
- package/src/lib/components/zoomable-panning-component/index.d.ts +1 -0
- package/src/lib/components/zoomable-panning-component/index.js +3 -0
- package/src/lib/components/zoomable-panning-component/index.js.map +1 -0
- package/src/lib/components/zoomable-panning-component/util.d.ts +58 -0
- package/src/lib/components/zoomable-panning-component/util.js +114 -0
- package/src/lib/components/zoomable-panning-component/util.js.map +1 -0
- package/src/lib/components/zoomable-panning-component/zoomable-panning-component.d.ts +132 -0
- package/src/lib/components/zoomable-panning-component/zoomable-panning-component.js +728 -0
- package/src/lib/components/zoomable-panning-component/zoomable-panning-component.js.map +1 -0
- package/src/lib/const/aglyn-besigner-logo-full.d.ts +39 -0
- package/src/lib/const/aglyn-besigner-logo-full.js +146 -0
- package/src/lib/const/aglyn-besigner-logo-full.js.map +1 -0
- package/src/lib/const/aglyn-console-logo-full.d.ts +34 -0
- package/src/lib/const/aglyn-console-logo-full.js +142 -0
- package/src/lib/const/aglyn-console-logo-full.js.map +1 -0
- package/src/lib/const/aglyn-logo-class-keys.d.ts +30 -0
- package/src/lib/const/aglyn-logo-class-keys.js +32 -0
- package/src/lib/const/aglyn-logo-class-keys.js.map +1 -0
- package/src/lib/const/aglyn-logo-full.d.ts +29 -0
- package/src/lib/const/aglyn-logo-full.js +111 -0
- package/src/lib/const/aglyn-logo-full.js.map +1 -0
- package/src/lib/const/list-filter.d.ts +260 -0
- package/src/lib/const/list-filter.js +409 -0
- package/src/lib/const/list-filter.js.map +1 -0
- package/src/lib/const/prebuilt-components.d.ts +17 -0
- package/src/lib/const/prebuilt-components.js +22 -0
- package/src/lib/const/prebuilt-components.js.map +1 -0
- package/src/lib/const/svg-icons.d.ts +75 -0
- package/src/lib/const/svg-icons.js +313 -0
- package/src/lib/const/svg-icons.js.map +1 -0
- package/src/lib/const/table-pagination.d.ts +106 -0
- package/src/lib/const/table-pagination.js +106 -0
- package/src/lib/const/table-pagination.js.map +1 -0
- package/src/lib/contexts/confirmation.context.d.ts +996 -0
- package/src/lib/contexts/confirmation.context.js +49 -0
- package/src/lib/contexts/confirmation.context.js.map +1 -0
- package/src/lib/contexts/loading.context.d.ts +93 -0
- package/src/lib/contexts/loading.context.js +126 -0
- package/src/lib/contexts/loading.context.js.map +1 -0
- package/src/lib/hocs/create-hoc-with-context-consumer.d.ts +36 -0
- package/src/lib/hocs/create-hoc-with-context-consumer.js +44 -0
- package/src/lib/hocs/create-hoc-with-context-consumer.js.map +1 -0
- package/src/lib/hocs/with-hoc.d.ts +32 -0
- package/src/lib/hocs/with-hoc.js +37 -0
- package/src/lib/hocs/with-hoc.js.map +1 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icon.d.ts +20 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icon.js +48 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icon.js.map +1 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icons-fuzzy.d.ts +26 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icons-fuzzy.js +73 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icons-fuzzy.js.map +1 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icons.d.ts +19 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icons.js +49 -0
- package/src/lib/hooks/mdi-icon/use-mdi-icons.js.map +1 -0
- package/src/lib/hooks/router-events.d.ts +56 -0
- package/src/lib/hooks/router-events.js +88 -0
- package/src/lib/hooks/router-events.js.map +1 -0
- package/src/lib/hooks/use-async-effect.d.ts +24 -0
- package/src/lib/hooks/use-async-effect.js +44 -0
- package/src/lib/hooks/use-async-effect.js.map +1 -0
- package/src/lib/hooks/use-callback-param-ref.d.ts +19 -0
- package/src/lib/hooks/use-callback-param-ref.js +29 -0
- package/src/lib/hooks/use-callback-param-ref.js.map +1 -0
- package/src/lib/hooks/use-id.d.ts +21 -0
- package/src/lib/hooks/use-id.js +28 -0
- package/src/lib/hooks/use-id.js.map +1 -0
- package/src/lib/hooks/use-isomorphic-layout-effect.d.ts +19 -0
- package/src/lib/hooks/use-isomorphic-layout-effect.js +20 -0
- package/src/lib/hooks/use-isomorphic-layout-effect.js.map +1 -0
- package/src/lib/hooks/use-merge-refs.d.ts +38 -0
- package/src/lib/hooks/use-merge-refs.js +52 -0
- package/src/lib/hooks/use-merge-refs.js.map +1 -0
- package/src/lib/hooks/use-subscribable.d.ts +29 -0
- package/src/lib/hooks/use-subscribable.js +50 -0
- package/src/lib/hooks/use-subscribable.js.map +1 -0
- package/src/lib/types.d.ts +18 -0
- package/src/lib/types.js +18 -0
- package/src/lib/types.js.map +1 -0
- package/src/lib/utils/make-link-elements.d.ts +24 -0
- package/src/lib/utils/make-link-elements.js +32 -0
- package/src/lib/utils/make-link-elements.js.map +1 -0
- package/src/lib/utils/make-meta-elements.d.ts +24 -0
- package/src/lib/utils/make-meta-elements.js +32 -0
- package/src/lib/utils/make-meta-elements.js.map +1 -0
- package/src/lib/utils/scroll-overflow.d.ts +120 -0
- package/src/lib/utils/scroll-overflow.js +115 -0
- package/src/lib/utils/scroll-overflow.js.map +1 -0
- package/src/lib/utils/vendor.d.ts +17 -0
- package/src/lib/utils/vendor.js +18 -0
- package/src/lib/utils/vendor.js.map +1 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ import { _isFnT } from "@aglyn/shared-util-tools";
|
|
17
|
+
import isEqual from "lodash-es/isEqual.js";
|
|
18
|
+
import { useCallback, useEffect, useState } from "react";
|
|
19
|
+
export function useSubscribable($subscribable, initialValue, mapValue, dependencies = []) {
|
|
20
|
+
const [value, update] = useState(()=>initialValue);
|
|
21
|
+
const _dependencies = [
|
|
22
|
+
...dependencies || []
|
|
23
|
+
];
|
|
24
|
+
const mapUpdate = useCallback((newValue, prevValue)=>{
|
|
25
|
+
if (_isFnT(mapValue)) return mapValue(newValue, prevValue);
|
|
26
|
+
return newValue;
|
|
27
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28
|
+
}, _dependencies);
|
|
29
|
+
useEffect(()=>{
|
|
30
|
+
function handleChange(newValue) {
|
|
31
|
+
update((prevValue)=>{
|
|
32
|
+
const value = mapUpdate(newValue, prevValue);
|
|
33
|
+
if (isEqual(prevValue, value)) return prevValue;
|
|
34
|
+
return value;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const subscriber = $subscribable == null ? void 0 : $subscribable.subscribe(handleChange);
|
|
38
|
+
return ()=>{
|
|
39
|
+
var _subscriber_unsubscribe;
|
|
40
|
+
return subscriber == null ? void 0 : (_subscriber_unsubscribe = subscriber.unsubscribe) == null ? void 0 : _subscriber_unsubscribe.call(subscriber);
|
|
41
|
+
};
|
|
42
|
+
}, [
|
|
43
|
+
$subscribable,
|
|
44
|
+
mapUpdate
|
|
45
|
+
]);
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
export default useSubscribable;
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=use-subscribable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/hooks/use-subscribable.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2022 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _isFnT } from '@aglyn/shared-util-tools'\nimport isEqual from 'lodash-es/isEqual.js'\nimport { type DependencyList, useCallback, useEffect, useState } from 'react'\nimport type {\n Observable as RxJsObservable,\n Unsubscribable as RxJsUnsubscribable,\n} from 'rxjs'\n\nexport type SubscribableLike<T> = RxJsObservable<T> | Observable<T>\nexport type MapObservable<V, R> = (newValue: V, prevValue: R) => R\n\nexport interface Observable<T> {\n subscribe: (listener: (value: T) => void) => {\n unsubscribe: () => void\n }\n pipe?(...args: any[]): any\n}\n\nexport function useSubscribable<T>(\n $subscribable: SubscribableLike<T>,\n): T | undefined\nexport function useSubscribable<\n T,\n U = any,\n M extends MapObservable<U, U | T | undefined> = MapObservable<\n U,\n U | T | undefined\n >,\n>(\n $subscribable: SubscribableLike<U>,\n initialValue: U | T,\n mapValue?: M,\n dependencies?: DependencyList,\n): U | T\nexport function useSubscribable<\n T,\n U = any,\n M extends MapObservable<U, U | T | undefined> = MapObservable<\n U,\n U | T | undefined\n >,\n>(\n $subscribable: SubscribableLike<U>,\n initialValue?: U | T,\n mapValue?: M,\n dependencies: DependencyList = [],\n): U | T | undefined {\n const [value, update] = useState<T | U | undefined>(() => initialValue)\n const _dependencies = [...(dependencies || [])]\n\n const mapUpdate = useCallback((newValue: U, prevValue: T | U | undefined) => {\n if (_isFnT(mapValue)) return mapValue(newValue, prevValue as T) as T\n return newValue as U\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, _dependencies)\n\n useEffect(() => {\n function handleChange(newValue: U) {\n update((prevValue) => {\n const value = mapUpdate(newValue, prevValue)\n if (isEqual(prevValue, value)) return prevValue\n return value\n })\n }\n\n const subscriber: RxJsUnsubscribable =\n $subscribable?.subscribe(handleChange)\n return () => subscriber?.unsubscribe?.()\n }, [$subscribable, mapUpdate])\n\n return value\n}\n\nexport default useSubscribable\n"],"names":["_isFnT","isEqual","useCallback","useEffect","useState","useSubscribable","$subscribable","initialValue","mapValue","dependencies","value","update","_dependencies","mapUpdate","newValue","prevValue","handleChange","subscriber","subscribe","unsubscribe"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,MAAM,QAAQ,2BAA0B;AACjD,OAAOC,aAAa,uBAAsB;AAC1C,SAA8BC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAgC7E,OAAO,SAASC,gBAQdC,aAAkC,EAClCC,YAAoB,EACpBC,QAAY,EACZC,eAA+B,EAAE;IAEjC,MAAM,CAACC,OAAOC,OAAO,GAAGP,SAA4B,IAAMG;IAC1D,MAAMK,gBAAgB;WAAKH,gBAAgB,EAAE;KAAE;IAE/C,MAAMI,YAAYX,YAAY,CAACY,UAAaC;QAC1C,IAAIf,OAAOQ,WAAW,OAAOA,SAASM,UAAUC;QAChD,OAAOD;IACP,uDAAuD;IACzD,GAAGF;IAEHT,UAAU;QACR,SAASa,aAAaF,QAAW;YAC/BH,OAAO,CAACI;gBACN,MAAML,QAAQG,UAAUC,UAAUC;gBAClC,IAAId,QAAQc,WAAWL,QAAQ,OAAOK;gBACtC,OAAOL;YACT;QACF;QAEA,MAAMO,aACJX,iCAAAA,cAAeY,SAAS,CAACF;QAC3B,OAAO;gBAAMC;mBAAAA,+BAAAA,0BAAAA,WAAYE,WAAW,qBAAvBF,6BAAAA;;IACf,GAAG;QAACX;QAAeO;KAAU;IAE7B,OAAOH;AACT;AAEA,eAAeL,gBAAe"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export type ApplyFilterFn = (query: string) => void;
|
|
18
|
+
export type ClearFilterFn = () => void;
|
package/src/lib/types.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ export { };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/shared/ui/jsx/src/lib/types.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2021 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nexport type ApplyFilterFn = (query: string) => void\nexport type ClearFilterFn = () => void\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAID,WAAsC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export type LinkElementProps = JSX.IntrinsicElements['link'];
|
|
18
|
+
export type MakeLinkElementsConfig = Array<[
|
|
19
|
+
rel?: LinkElementProps['rel'],
|
|
20
|
+
href?: LinkElementProps['href'],
|
|
21
|
+
other?: Partial<LinkElementProps>
|
|
22
|
+
]>;
|
|
23
|
+
export declare function makeLinkElements(items: MakeLinkElementsConfig): JSX.Element[];
|
|
24
|
+
export default makeLinkElements;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ // export type LinkElementProps = LinkHTMLAttributes<HTMLLinkElement>
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
19
|
+
export function makeLinkElements(items) {
|
|
20
|
+
return items.map((item, key)=>{
|
|
21
|
+
var _ref, _rest_key;
|
|
22
|
+
const [rel, href, other] = item;
|
|
23
|
+
const _extends1 = _extends({}, other), {} = _extends1, rest = _extends({}, _extends1);
|
|
24
|
+
return /*#__PURE__*/ _jsx("link", _extends({
|
|
25
|
+
rel: rel,
|
|
26
|
+
href: href
|
|
27
|
+
}, rest), (_ref = (_rest_key = rest.key) != null ? _rest_key : rest.id) != null ? _ref : key);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export default makeLinkElements;
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=make-link-elements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/utils/make-link-elements.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2022 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// export type LinkElementProps = LinkHTMLAttributes<HTMLLinkElement>\nexport type LinkElementProps = JSX.IntrinsicElements['link']\nexport type MakeLinkElementsConfig = Array<[\n rel?: LinkElementProps['rel'],\n href?: LinkElementProps['href'],\n other?: Partial<LinkElementProps>\n]>\n\nexport function makeLinkElements(items: MakeLinkElementsConfig): JSX.Element[] {\n return items.map((item, key) => {\n const [rel, href, other] = item\n const {...rest} = {...other}\n return (\n <link\n key={rest.key ?? rest.id ?? key}\n rel={rel}\n href={href}\n {...rest}\n />\n )\n })\n}\nexport default makeLinkElements\n"],"names":["makeLinkElements","items","map","item","key","rest","rel","href","other","link","id"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,qEAAqE;;;AAQrE,OAAO,SAASA,iBAAiBC,KAA6B;IAC5D,OAAOA,MAAMC,GAAG,CAAC,CAACC,MAAMC;YAKbC,MAAAA;QAJT,MAAM,CAACC,KAAKC,MAAMC,MAAM,GAAGL;QAC3B,MAAkB,YAAA,aAAIK,QAAhB,EAAS,GAAG,WAARH,oBAAQ;QAClB,qBACE,KAACI;YAECH,KAAKA;YACLC,MAAMA;WACFF,QAHCA,QAAAA,YAAAA,KAAKD,GAAG,YAARC,YAAYA,KAAKK,EAAE,YAAnBL,OAAuBD;IAMlC;AACF;AACA,eAAeJ,iBAAgB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export type MetaElemElementProps = JSX.IntrinsicElements['meta'];
|
|
18
|
+
export type MakeMetaElementsConfig = Array<[
|
|
19
|
+
name?: MetaElemElementProps['name'],
|
|
20
|
+
content?: MetaElemElementProps['content'],
|
|
21
|
+
other?: Partial<MetaElemElementProps>
|
|
22
|
+
]>;
|
|
23
|
+
export declare function makeMetaElements(items: MakeMetaElementsConfig): JSX.Element[];
|
|
24
|
+
export default makeMetaElements;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ // export type MetaElemElementProps = MetaHTMLAttributes<HTMLMetaElement>
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
19
|
+
export function makeMetaElements(items) {
|
|
20
|
+
return items.map((item, key)=>{
|
|
21
|
+
var _ref, _rest_key;
|
|
22
|
+
const [name, content, other] = item;
|
|
23
|
+
const _extends1 = _extends({}, other), {} = _extends1, rest = _extends({}, _extends1);
|
|
24
|
+
return /*#__PURE__*/ _jsx("meta", _extends({
|
|
25
|
+
name: name,
|
|
26
|
+
content: content
|
|
27
|
+
}, rest), (_ref = (_rest_key = rest.key) != null ? _rest_key : rest.id) != null ? _ref : key);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export default makeMetaElements;
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=make-meta-elements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/utils/make-meta-elements.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2022 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// export type MetaElemElementProps = MetaHTMLAttributes<HTMLMetaElement>\nexport type MetaElemElementProps = JSX.IntrinsicElements['meta']\nexport type MakeMetaElementsConfig = Array<[\n name?: MetaElemElementProps['name'],\n content?: MetaElemElementProps['content'],\n other?: Partial<MetaElemElementProps>\n]>\n\nexport function makeMetaElements(items: MakeMetaElementsConfig): JSX.Element[] {\n return items.map((item, key) => {\n const [name, content, other] = item\n const {...rest} = {...other}\n return (\n <meta\n key={rest.key ?? rest.id ?? key}\n name={name}\n content={content}\n {...rest}\n />\n )\n })\n}\nexport default makeMetaElements\n"],"names":["makeMetaElements","items","map","item","key","rest","name","content","other","meta","id"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,yEAAyE;;;AAQzE,OAAO,SAASA,iBAAiBC,KAA6B;IAC5D,OAAOA,MAAMC,GAAG,CAAC,CAACC,MAAMC;YAKbC,MAAAA;QAJT,MAAM,CAACC,MAAMC,SAASC,MAAM,GAAGL;QAC/B,MAAkB,YAAA,aAAIK,QAAhB,EAAS,GAAG,WAARH,oBAAQ;QAClB,qBACE,KAACI;YAECH,MAAMA;YACNC,SAASA;WACLF,QAHCA,QAAAA,YAAAA,KAAKD,GAAG,YAARC,YAAYA,KAAKK,EAAE,YAAnBL,OAAuBD;IAMlC;AACF;AACA,eAAeJ,iBAAgB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The house treatment for a box that scrolls its own content (AGL-1162,
|
|
19
|
+
* AGL-2568, AGL-3045).
|
|
20
|
+
*
|
|
21
|
+
* It lives in one module rather than in the components that need it because
|
|
22
|
+
* they had already drifted: the Markdown table and the Table element are the
|
|
23
|
+
* same block drawn by different code, one carried a fade the other did not,
|
|
24
|
+
* and neither could actually scroll. A shared shape is what keeps the answer
|
|
25
|
+
* to "how wide may this get" from being decided twice.
|
|
26
|
+
*
|
|
27
|
+
* It lives in THIS library rather than in `plugins-mui` because the console's
|
|
28
|
+
* tables need the same answer (AGL-3045): `ScrollTable` draws every table the
|
|
29
|
+
* console and its plugins render outside the shared grid, and a plugin may
|
|
30
|
+
* not import another plugin. Pure style data — no component, no side effect —
|
|
31
|
+
* so importing it by subpath costs a published page nothing it did not
|
|
32
|
+
* already pay for.
|
|
33
|
+
*/
|
|
34
|
+
/** The axis a box scrolls on, named as the `scroll()` timeline names it. */
|
|
35
|
+
export type ScrollOverflowAxis = 'block' | 'inline';
|
|
36
|
+
/**
|
|
37
|
+
* The fade's animation binding, for the rules of the scrolling box itself.
|
|
38
|
+
*
|
|
39
|
+
* It rides a scroll-driven animation on purpose: a `scroll()` timeline on a
|
|
40
|
+
* box with nothing to scroll is INACTIVE, so its animation applies no styles
|
|
41
|
+
* at all. That is the only way to say "fade only when overflowing" in CSS
|
|
42
|
+
* with no measuring and no JavaScript, and it degrades to plain
|
|
43
|
+
* unfaded-but-scrollable in a browser that lacks it.
|
|
44
|
+
*/
|
|
45
|
+
export declare const scrollOverflowFadeTimeline: (axis: ScrollOverflowAxis) => {
|
|
46
|
+
'@supports (animation-timeline: scroll())': {
|
|
47
|
+
animation: string;
|
|
48
|
+
animationTimeline: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The keyframes {@link scrollOverflowFadeTimeline} names.
|
|
53
|
+
*
|
|
54
|
+
* Held at the fade until the box is all but scrolled out, then dropped, so
|
|
55
|
+
* the last row or column is never the one the affordance obscures. `none`
|
|
56
|
+
* does not interpolate with a gradient, so that last step is a clean switch.
|
|
57
|
+
*/
|
|
58
|
+
export declare const scrollOverflowFadeKeyframes: (axis: ScrollOverflowAxis) => {
|
|
59
|
+
[x: string]: {
|
|
60
|
+
'0%, 92%': {
|
|
61
|
+
maskImage: string;
|
|
62
|
+
};
|
|
63
|
+
'100%': {
|
|
64
|
+
maskImage: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* The widest a table is allowed to grow before it starts wrapping again.
|
|
70
|
+
*
|
|
71
|
+
* 560 rather than the natural width of the content: measured on
|
|
72
|
+
* `/alternatives/alternativeswebflow` at 375px, letting the table take its
|
|
73
|
+
* full `max-content` width came to 1010px — every cell on one line, but two
|
|
74
|
+
* thirds of the table off-screen and the row label lost as soon as the reader
|
|
75
|
+
* moves. Capped at 560 the same table is 658px tall instead of 1022 and its
|
|
76
|
+
* worst cell is 3 lines instead of 6, for 217px of sideways travel. Under the
|
|
77
|
+
* `sm` breakpoint on purpose, so the cap itself can never introduce a
|
|
78
|
+
* scrollbar on a tablet or a desktop.
|
|
79
|
+
*/
|
|
80
|
+
export declare const TABLE_SCROLL_MAX_WIDTH = 560;
|
|
81
|
+
/**
|
|
82
|
+
* The sizing that lets a wide table overflow its wrapper — and leaves a
|
|
83
|
+
* narrow one exactly as it was.
|
|
84
|
+
*
|
|
85
|
+
* `width: 100%` was the bug: a table that can never exceed its wrapper never
|
|
86
|
+
* triggers the wrapper's `overflow-x`, so the browser compresses columns to
|
|
87
|
+
* min-content instead of scrolling. `max-content` asks for the width the
|
|
88
|
+
* content actually wants; `min-width: 100%` still fills the wrapper when the
|
|
89
|
+
* content wants less, which is why a short "Yes / No" grid keeps its present
|
|
90
|
+
* layout and gains no scrollbar. `min-width` beats `max-width` in the CSS
|
|
91
|
+
* used-width rules, so the cap applies only while the wrapper is narrower
|
|
92
|
+
* than it — a desktop table fills its container as before.
|
|
93
|
+
*/
|
|
94
|
+
export declare const scrollableTableSx: {
|
|
95
|
+
readonly width: "max-content";
|
|
96
|
+
readonly minWidth: "100%";
|
|
97
|
+
readonly maxWidth: 560;
|
|
98
|
+
};
|
|
99
|
+
/** The scroll box around such a table: it scrolls, and it says that it does. */
|
|
100
|
+
export declare const scrollableTableWrapperSx: {
|
|
101
|
+
'@supports (animation-timeline: scroll())': {
|
|
102
|
+
animation: string;
|
|
103
|
+
animationTimeline: string;
|
|
104
|
+
};
|
|
105
|
+
overflowX: string;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* What makes the scroll box reachable by keyboard and findable by a screen
|
|
109
|
+
* reader (WCAG 2.1.1).
|
|
110
|
+
*
|
|
111
|
+
* A scrollable region with no focusable descendant cannot be scrolled by
|
|
112
|
+
* keyboard at all — the arrow keys move the page behind it — so the box takes
|
|
113
|
+
* a tab stop of its own. `region` plus a name is what turns that tab stop
|
|
114
|
+
* into something announced rather than a silent landing spot.
|
|
115
|
+
*/
|
|
116
|
+
export declare const scrollRegionProps: (label: string) => {
|
|
117
|
+
tabIndex: number;
|
|
118
|
+
role: string;
|
|
119
|
+
'aria-label': string;
|
|
120
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* The house treatment for a box that scrolls its own content (AGL-1162,
|
|
18
|
+
* AGL-2568, AGL-3045).
|
|
19
|
+
*
|
|
20
|
+
* It lives in one module rather than in the components that need it because
|
|
21
|
+
* they had already drifted: the Markdown table and the Table element are the
|
|
22
|
+
* same block drawn by different code, one carried a fade the other did not,
|
|
23
|
+
* and neither could actually scroll. A shared shape is what keeps the answer
|
|
24
|
+
* to "how wide may this get" from being decided twice.
|
|
25
|
+
*
|
|
26
|
+
* It lives in THIS library rather than in `plugins-mui` because the console's
|
|
27
|
+
* tables need the same answer (AGL-3045): `ScrollTable` draws every table the
|
|
28
|
+
* console and its plugins render outside the shared grid, and a plugin may
|
|
29
|
+
* not import another plugin. Pure style data — no component, no side effect —
|
|
30
|
+
* so importing it by subpath costs a published page nothing it did not
|
|
31
|
+
* already pay for.
|
|
32
|
+
*/ /** The axis a box scrolls on, named as the `scroll()` timeline names it. */ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
33
|
+
/** How much of the trailing edge the fade covers. */ const FADE_EXTENT = '28px';
|
|
34
|
+
const FADE_DIRECTION = {
|
|
35
|
+
block: 'to bottom',
|
|
36
|
+
inline: 'to right'
|
|
37
|
+
};
|
|
38
|
+
const fadeName = (axis)=>`aglyn-overflow-fade-${axis}`;
|
|
39
|
+
/**
|
|
40
|
+
* The fade's animation binding, for the rules of the scrolling box itself.
|
|
41
|
+
*
|
|
42
|
+
* It rides a scroll-driven animation on purpose: a `scroll()` timeline on a
|
|
43
|
+
* box with nothing to scroll is INACTIVE, so its animation applies no styles
|
|
44
|
+
* at all. That is the only way to say "fade only when overflowing" in CSS
|
|
45
|
+
* with no measuring and no JavaScript, and it degrades to plain
|
|
46
|
+
* unfaded-but-scrollable in a browser that lacks it.
|
|
47
|
+
*/ export const scrollOverflowFadeTimeline = (axis)=>({
|
|
48
|
+
'@supports (animation-timeline: scroll())': {
|
|
49
|
+
animation: `${fadeName(axis)} linear`,
|
|
50
|
+
animationTimeline: `scroll(self ${axis})`
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* The keyframes {@link scrollOverflowFadeTimeline} names.
|
|
55
|
+
*
|
|
56
|
+
* Held at the fade until the box is all but scrolled out, then dropped, so
|
|
57
|
+
* the last row or column is never the one the affordance obscures. `none`
|
|
58
|
+
* does not interpolate with a gradient, so that last step is a clean switch.
|
|
59
|
+
*/ export const scrollOverflowFadeKeyframes = (axis)=>({
|
|
60
|
+
[`@keyframes ${fadeName(axis)}`]: {
|
|
61
|
+
'0%, 92%': {
|
|
62
|
+
maskImage: `linear-gradient(${FADE_DIRECTION[axis]}, #000 calc(100% - ${FADE_EXTENT}), transparent)`
|
|
63
|
+
},
|
|
64
|
+
'100%': {
|
|
65
|
+
maskImage: 'none'
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* The widest a table is allowed to grow before it starts wrapping again.
|
|
71
|
+
*
|
|
72
|
+
* 560 rather than the natural width of the content: measured on
|
|
73
|
+
* `/alternatives/alternativeswebflow` at 375px, letting the table take its
|
|
74
|
+
* full `max-content` width came to 1010px — every cell on one line, but two
|
|
75
|
+
* thirds of the table off-screen and the row label lost as soon as the reader
|
|
76
|
+
* moves. Capped at 560 the same table is 658px tall instead of 1022 and its
|
|
77
|
+
* worst cell is 3 lines instead of 6, for 217px of sideways travel. Under the
|
|
78
|
+
* `sm` breakpoint on purpose, so the cap itself can never introduce a
|
|
79
|
+
* scrollbar on a tablet or a desktop.
|
|
80
|
+
*/ export const TABLE_SCROLL_MAX_WIDTH = 560;
|
|
81
|
+
/**
|
|
82
|
+
* The sizing that lets a wide table overflow its wrapper — and leaves a
|
|
83
|
+
* narrow one exactly as it was.
|
|
84
|
+
*
|
|
85
|
+
* `width: 100%` was the bug: a table that can never exceed its wrapper never
|
|
86
|
+
* triggers the wrapper's `overflow-x`, so the browser compresses columns to
|
|
87
|
+
* min-content instead of scrolling. `max-content` asks for the width the
|
|
88
|
+
* content actually wants; `min-width: 100%` still fills the wrapper when the
|
|
89
|
+
* content wants less, which is why a short "Yes / No" grid keeps its present
|
|
90
|
+
* layout and gains no scrollbar. `min-width` beats `max-width` in the CSS
|
|
91
|
+
* used-width rules, so the cap applies only while the wrapper is narrower
|
|
92
|
+
* than it — a desktop table fills its container as before.
|
|
93
|
+
*/ export const scrollableTableSx = {
|
|
94
|
+
width: 'max-content',
|
|
95
|
+
minWidth: '100%',
|
|
96
|
+
maxWidth: TABLE_SCROLL_MAX_WIDTH
|
|
97
|
+
};
|
|
98
|
+
/** The scroll box around such a table: it scrolls, and it says that it does. */ export const scrollableTableWrapperSx = _extends({
|
|
99
|
+
overflowX: 'auto'
|
|
100
|
+
}, scrollOverflowFadeTimeline('inline'), scrollOverflowFadeKeyframes('inline'));
|
|
101
|
+
/**
|
|
102
|
+
* What makes the scroll box reachable by keyboard and findable by a screen
|
|
103
|
+
* reader (WCAG 2.1.1).
|
|
104
|
+
*
|
|
105
|
+
* A scrollable region with no focusable descendant cannot be scrolled by
|
|
106
|
+
* keyboard at all — the arrow keys move the page behind it — so the box takes
|
|
107
|
+
* a tab stop of its own. `region` plus a name is what turns that tab stop
|
|
108
|
+
* into something announced rather than a silent landing spot.
|
|
109
|
+
*/ export const scrollRegionProps = (label)=>({
|
|
110
|
+
tabIndex: 0,
|
|
111
|
+
role: 'region',
|
|
112
|
+
'aria-label': label
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=scroll-overflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/utils/scroll-overflow.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The house treatment for a box that scrolls its own content (AGL-1162,\n * AGL-2568, AGL-3045).\n *\n * It lives in one module rather than in the components that need it because\n * they had already drifted: the Markdown table and the Table element are the\n * same block drawn by different code, one carried a fade the other did not,\n * and neither could actually scroll. A shared shape is what keeps the answer\n * to \"how wide may this get\" from being decided twice.\n *\n * It lives in THIS library rather than in `plugins-mui` because the console's\n * tables need the same answer (AGL-3045): `ScrollTable` draws every table the\n * console and its plugins render outside the shared grid, and a plugin may\n * not import another plugin. Pure style data — no component, no side effect —\n * so importing it by subpath costs a published page nothing it did not\n * already pay for.\n */\n\n/** The axis a box scrolls on, named as the `scroll()` timeline names it. */\nexport type ScrollOverflowAxis = 'block' | 'inline'\n\n/** How much of the trailing edge the fade covers. */\nconst FADE_EXTENT = '28px'\n\nconst FADE_DIRECTION: Record<ScrollOverflowAxis, string> = {\n block: 'to bottom',\n inline: 'to right',\n}\n\nconst fadeName = (axis: ScrollOverflowAxis) => `aglyn-overflow-fade-${axis}`\n\n/**\n * The fade's animation binding, for the rules of the scrolling box itself.\n *\n * It rides a scroll-driven animation on purpose: a `scroll()` timeline on a\n * box with nothing to scroll is INACTIVE, so its animation applies no styles\n * at all. That is the only way to say \"fade only when overflowing\" in CSS\n * with no measuring and no JavaScript, and it degrades to plain\n * unfaded-but-scrollable in a browser that lacks it.\n */\nexport const scrollOverflowFadeTimeline = (axis: ScrollOverflowAxis) => ({\n '@supports (animation-timeline: scroll())': {\n animation: `${fadeName(axis)} linear`,\n animationTimeline: `scroll(self ${axis})`,\n },\n})\n\n/**\n * The keyframes {@link scrollOverflowFadeTimeline} names.\n *\n * Held at the fade until the box is all but scrolled out, then dropped, so\n * the last row or column is never the one the affordance obscures. `none`\n * does not interpolate with a gradient, so that last step is a clean switch.\n */\nexport const scrollOverflowFadeKeyframes = (axis: ScrollOverflowAxis) => ({\n [`@keyframes ${fadeName(axis)}`]: {\n '0%, 92%': {\n maskImage: `linear-gradient(${FADE_DIRECTION[axis]}, #000 calc(100% - ${FADE_EXTENT}), transparent)`,\n },\n '100%': { maskImage: 'none' },\n },\n})\n\n/**\n * The widest a table is allowed to grow before it starts wrapping again.\n *\n * 560 rather than the natural width of the content: measured on\n * `/alternatives/alternativeswebflow` at 375px, letting the table take its\n * full `max-content` width came to 1010px — every cell on one line, but two\n * thirds of the table off-screen and the row label lost as soon as the reader\n * moves. Capped at 560 the same table is 658px tall instead of 1022 and its\n * worst cell is 3 lines instead of 6, for 217px of sideways travel. Under the\n * `sm` breakpoint on purpose, so the cap itself can never introduce a\n * scrollbar on a tablet or a desktop.\n */\nexport const TABLE_SCROLL_MAX_WIDTH = 560\n\n/**\n * The sizing that lets a wide table overflow its wrapper — and leaves a\n * narrow one exactly as it was.\n *\n * `width: 100%` was the bug: a table that can never exceed its wrapper never\n * triggers the wrapper's `overflow-x`, so the browser compresses columns to\n * min-content instead of scrolling. `max-content` asks for the width the\n * content actually wants; `min-width: 100%` still fills the wrapper when the\n * content wants less, which is why a short \"Yes / No\" grid keeps its present\n * layout and gains no scrollbar. `min-width` beats `max-width` in the CSS\n * used-width rules, so the cap applies only while the wrapper is narrower\n * than it — a desktop table fills its container as before.\n */\nexport const scrollableTableSx = {\n width: 'max-content',\n minWidth: '100%',\n maxWidth: TABLE_SCROLL_MAX_WIDTH,\n} as const\n\n/** The scroll box around such a table: it scrolls, and it says that it does. */\nexport const scrollableTableWrapperSx = {\n overflowX: 'auto',\n ...scrollOverflowFadeTimeline('inline'),\n ...scrollOverflowFadeKeyframes('inline'),\n}\n\n/**\n * What makes the scroll box reachable by keyboard and findable by a screen\n * reader (WCAG 2.1.1).\n *\n * A scrollable region with no focusable descendant cannot be scrolled by\n * keyboard at all — the arrow keys move the page behind it — so the box takes\n * a tab stop of its own. `region` plus a name is what turns that tab stop\n * into something announced rather than a silent landing spot.\n */\nexport const scrollRegionProps = (label: string) => ({\n tabIndex: 0,\n role: 'region',\n 'aria-label': label,\n})\n"],"names":["FADE_EXTENT","FADE_DIRECTION","block","inline","fadeName","axis","scrollOverflowFadeTimeline","animation","animationTimeline","scrollOverflowFadeKeyframes","maskImage","TABLE_SCROLL_MAX_WIDTH","scrollableTableSx","width","minWidth","maxWidth","scrollableTableWrapperSx","overflowX","scrollRegionProps","label","tabIndex","role"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;CAgBC,GAED,0EAA0E;AAG1E,mDAAmD,GACnD,MAAMA,cAAc;AAEpB,MAAMC,iBAAqD;IACzDC,OAAO;IACPC,QAAQ;AACV;AAEA,MAAMC,WAAW,CAACC,OAA6B,CAAC,oBAAoB,EAAEA,MAAM;AAE5E;;;;;;;;CAQC,GACD,OAAO,MAAMC,6BAA6B,CAACD,OAA8B,CAAA;QACvE,4CAA4C;YAC1CE,WAAW,GAAGH,SAASC,MAAM,OAAO,CAAC;YACrCG,mBAAmB,CAAC,YAAY,EAAEH,KAAK,CAAC,CAAC;QAC3C;IACF,CAAA,EAAE;AAEF;;;;;;CAMC,GACD,OAAO,MAAMI,8BAA8B,CAACJ,OAA8B,CAAA;QACxE,CAAC,CAAC,WAAW,EAAED,SAASC,OAAO,CAAC,EAAE;YAChC,WAAW;gBACTK,WAAW,CAAC,gBAAgB,EAAET,cAAc,CAACI,KAAK,CAAC,mBAAmB,EAAEL,YAAY,eAAe,CAAC;YACtG;YACA,QAAQ;gBAAEU,WAAW;YAAO;QAC9B;IACF,CAAA,EAAE;AAEF;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,yBAAyB,IAAG;AAEzC;;;;;;;;;;;;CAYC,GACD,OAAO,MAAMC,oBAAoB;IAC/BC,OAAO;IACPC,UAAU;IACVC,UAAUJ;AACZ,EAAU;AAEV,8EAA8E,GAC9E,OAAO,MAAMK,2BAA2B;IACtCC,WAAW;GACRX,2BAA2B,WAC3BG,4BAA4B,WAChC;AAED;;;;;;;;CAQC,GACD,OAAO,MAAMS,oBAAoB,CAACC,QAAmB,CAAA;QACnDC,UAAU;QACVC,MAAM;QACN,cAAcF;IAChB,CAAA,EAAE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export { isContextConsumer, isContextProvider, isElement as isReactElement, isForwardRef, isFragment, isLazy, isMemo, isPortal, isProfiler, isStrictMode, isSuspense, isValidElementType, } from 'react-is';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ export { isContextConsumer, isContextProvider, isElement as isReactElement, isForwardRef, isFragment, isLazy, isMemo, isPortal, isProfiler, isStrictMode, isSuspense, isValidElementType } from "react-is";
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=vendor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/utils/vendor.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2022 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport {\n isContextConsumer,\n isContextProvider,\n isElement as isReactElement,\n isForwardRef,\n isFragment,\n isLazy,\n isMemo,\n isPortal,\n isProfiler,\n isStrictMode,\n isSuspense,\n isValidElementType,\n} from 'react-is'\n"],"names":["isContextConsumer","isContextProvider","isElement","isReactElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SACEA,iBAAiB,EACjBC,iBAAiB,EACjBC,aAAaC,cAAc,EAC3BC,YAAY,EACZC,UAAU,EACVC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,YAAY,EACZC,UAAU,EACVC,kBAAkB,QACb,WAAU"}
|