@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../../libs/shared/ui/jsx/src/lib/components/navigation-view/navigation-view.tsx"],"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\nimport { generateComponentClassKeys } from '@aglyn/shared-ui-theme'\nimport { mergeSxProps } from '@aglyn/shared-ui-theme'\nimport {\n AppBar,\n type AppBarProps,\n Stack,\n type StackProps,\n styled,\n Toolbar,\n} from '@mui/material'\nimport { motion } from 'framer-motion'\nimport { forwardRef, useState } from 'react'\nimport ScrollReaction from '../scroll-reaction'\n\nconst classKeys = generateComponentClassKeys('AglynNavigationDrawer', [\n 'root',\n 'appBar',\n 'toolbar',\n 'appBarLeft',\n 'appBarRight',\n 'content',\n 'bottomAppBar',\n])\n\nconst StyledAppBar = styled<any>(AppBar)<AppBarProps>(({ theme }) => {\n const tv = (theme as any).vars || theme\n return {\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: tv.palette.divider,\n zIndex: theme.zIndex.appBar,\n transition: theme.transitions.create(['background-image', 'box-shadow'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.standard,\n }),\n }\n})\n\nexport interface NavigationAppBarProps extends AppBarProps {\n scrollView?: Node | Window\n disableHideOnScroll?: boolean\n disableElevateOnScroll?: boolean\n}\n\nexport const NavigationAppBar = forwardRef<any, NavigationAppBarProps>(\n (props, forwardRef) => {\n const {\n disableHideOnScroll,\n disableElevateOnScroll,\n scrollView,\n children,\n ...rest\n } = props\n\n return (\n <ScrollReaction threshold={50} target={scrollView}>\n {({ activeWithoutHysteresis, activeWithHysteresis }) => (\n <StyledAppBar\n ref={forwardRef}\n color=\"default\"\n position=\"relative\"\n variant=\"elevation\"\n elevation={\n activeWithoutHysteresis && !disableElevateOnScroll ? 4 : 0\n }\n enableColorOnDark\n component={disableHideOnScroll ? 'header' : motion.header}\n animate={\n disableHideOnScroll\n ? undefined\n : {\n height: !activeWithHysteresis ? null : 0,\n overflow: 'hidden',\n }\n }\n {...rest}\n >\n {children}\n </StyledAppBar>\n )}\n </ScrollReaction>\n )\n },\n)\n\nexport interface NavigationViewProps extends StackProps {\n appBarLeft?: JSX.Children\n appBarRight?: JSX.Children\n childrenAfterToolbar?: JSX.Children\n bottomAppBar?: JSX.Children\n AppBarProps?: Partial<NavigationAppBarProps>\n AppBarLeftProps?: Partial<StackProps>\n AppBarRightProps?: Partial<StackProps>\n ContentProps?: Partial<StackProps>\n}\n\nexport const NavigationView = forwardRef<any, NavigationViewProps>(\n (props, forwardRef) => {\n const {\n sx,\n children,\n appBarLeft,\n appBarRight,\n childrenAfterToolbar,\n bottomAppBar,\n AppBarProps,\n AppBarLeftProps,\n AppBarRightProps,\n ContentProps,\n ...rest\n } = props\n\n const [scrollView, setScrollView] = useState<Node | Window>(null)\n\n return (\n <Stack\n ref={forwardRef}\n direction=\"column\"\n spacing={0}\n {...rest}\n sx={mergeSxProps(\n {\n alignItems: 'stretch',\n justifyContent: 'flex-start',\n flexGrow: 1,\n height: 1,\n width: 1,\n overflow: 'hidden',\n },\n sx,\n )}\n >\n <NavigationAppBar\n scrollView={scrollView}\n className={classKeys.appBar}\n {...AppBarProps}\n >\n <Toolbar className={classKeys.toolbar}>\n <Stack\n direction=\"row\"\n spacing={2}\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n width: 1,\n }}\n >\n <Stack\n direction=\"row\"\n className={classKeys.appBarLeft}\n {...AppBarLeftProps}\n sx={mergeSxProps(\n { alignItems: 'center', justifyContent: 'flex-start' },\n AppBarLeftProps?.sx,\n )}\n >\n {appBarLeft}\n </Stack>\n <Stack\n direction=\"row\"\n className={classKeys.appBarRight}\n {...AppBarRightProps}\n sx={mergeSxProps(\n { alignItems: 'center', justifyContent: 'flex-start' },\n AppBarRightProps?.sx,\n )}\n >\n {appBarRight}\n </Stack>\n </Stack>\n </Toolbar>\n {childrenAfterToolbar}\n </NavigationAppBar>\n <Stack\n ref={setScrollView}\n component=\"main\"\n direction=\"column\"\n className={classKeys.content}\n {...ContentProps}\n sx={mergeSxProps(\n {\n overflow: 'auto',\n flexGrow: 1,\n height: 1,\n width: 1,\n bgcolor: 'background.default',\n zIndex: 1,\n },\n ContentProps?.sx,\n )}\n >\n {children}\n </Stack>\n <Stack\n component=\"footer\"\n direction=\"column\"\n className={classKeys.bottomAppBar}\n >\n {bottomAppBar}\n </Stack>\n </Stack>\n )\n },\n)\nNavigationView.displayName = 'NavigationView'\n\nexport default NavigationView\n"],"names":["generateComponentClassKeys","mergeSxProps","AppBar","Stack","styled","Toolbar","motion","forwardRef","useState","ScrollReaction","classKeys","StyledAppBar","theme","tv","vars","borderBottomWidth","borderBottomStyle","borderBottomColor","palette","divider","zIndex","appBar","transition","transitions","create","easing","sharp","duration","standard","NavigationAppBar","props","disableHideOnScroll","disableElevateOnScroll","scrollView","children","rest","threshold","target","activeWithoutHysteresis","activeWithHysteresis","ref","color","position","variant","elevation","enableColorOnDark","component","header","animate","undefined","height","overflow","NavigationView","sx","appBarLeft","appBarRight","childrenAfterToolbar","bottomAppBar","AppBarProps","AppBarLeftProps","AppBarRightProps","ContentProps","setScrollView","direction","spacing","alignItems","justifyContent","flexGrow","width","className","toolbar","content","bgcolor","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2024 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
|
+
import { type LinkProps } from 'next/link';
|
|
18
|
+
import { type AnchorHTMLAttributes } from 'react';
|
|
19
|
+
export interface NextAnchorProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
20
|
+
}
|
|
21
|
+
export declare const NextAnchor: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & NextAnchorProps, Pick<import("react").DetailedHTMLProps<AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, keyof import("react").ClassAttributes<HTMLAnchorElement> | keyof AnchorHTMLAttributes<HTMLAnchorElement>>, {}>;
|
|
22
|
+
export type NextLinkBaseProps = Omit<NextAnchorProps, 'href'> & Omit<LinkProps, 'href'> & JSX.OverrideableComponentProps;
|
|
23
|
+
export interface NextLinkProps extends NextLinkBaseProps, NextLinkBaseProps {
|
|
24
|
+
hrefTo?: LinkProps['href'];
|
|
25
|
+
}
|
|
26
|
+
export declare const NextLink: import("react").ForwardRefExoticComponent<Omit<NextLinkProps, "ref"> & import("react").RefAttributes<any>>;
|
|
27
|
+
export default NextLink;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
* Copyright 2024 Aglyn LLC
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
* you may not use this file except in compliance with the License.
|
|
10
|
+
* You may obtain a copy of the License at
|
|
11
|
+
*
|
|
12
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
*
|
|
14
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
* See the License for the specific language governing permissions and
|
|
18
|
+
* limitations under the License.
|
|
19
|
+
*/ import { styled } from "@mui/material/styles";
|
|
20
|
+
import Link from "next/link";
|
|
21
|
+
import { forwardRef, useCallback, useState } from "react";
|
|
22
|
+
import { LinkNavigationReporter } from "./link-navigation-reporter.js";
|
|
23
|
+
// Add support for the sx prop
|
|
24
|
+
export const NextAnchor = styled('a', {
|
|
25
|
+
name: 'AglynNextLink'
|
|
26
|
+
})({});
|
|
27
|
+
NextAnchor.displayName = 'NextAnchor';
|
|
28
|
+
NextAnchor.aglyn = true;
|
|
29
|
+
export const NextLink = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
30
|
+
const { href: _2, hrefTo, replace, scroll, passHref = true, shallow, prefetch, locale, children, onPointerEnter, onTouchStart, onFocus } = props, rest = _object_without_properties_loose(props, [
|
|
31
|
+
"href",
|
|
32
|
+
"hrefTo",
|
|
33
|
+
"replace",
|
|
34
|
+
"scroll",
|
|
35
|
+
"passHref",
|
|
36
|
+
"shallow",
|
|
37
|
+
"prefetch",
|
|
38
|
+
"locale",
|
|
39
|
+
"children",
|
|
40
|
+
"onPointerEnter",
|
|
41
|
+
"onTouchStart",
|
|
42
|
+
"onFocus"
|
|
43
|
+
]);
|
|
44
|
+
// Next prefetches every link that enters the viewport, and for a statically
|
|
45
|
+
// generated route that means the route's whole RSC payload. On a page whose
|
|
46
|
+
// header links to five destinations, a visitor who reads the page and leaves
|
|
47
|
+
// is served all five anyway — measured at 164.5 KB across 5 requests on the
|
|
48
|
+
// marketing home page, about a sixth of everything that page transfers, and
|
|
49
|
+
// five tenant invocations besides.
|
|
50
|
+
//
|
|
51
|
+
// Prefetching is held until the visitor reaches for a link instead. Pointer,
|
|
52
|
+
// touch and focus are the three ways that happens, and each precedes the
|
|
53
|
+
// click by long enough for the payload to land. Flipping Next's own prop is
|
|
54
|
+
// what re-arms it: `false` suppresses viewport AND hover prefetch in the app
|
|
55
|
+
// router, so leaving it there would move the fetch onto the click itself.
|
|
56
|
+
//
|
|
57
|
+
// An explicit `prefetch` from a caller still decides — `true` for a link
|
|
58
|
+
// worth paying for up front, `false` for one that must never prefetch.
|
|
59
|
+
const [reachedFor, setReachedFor] = useState(false);
|
|
60
|
+
const noteIntent = useCallback(()=>setReachedFor(true), []);
|
|
61
|
+
const compose = (theirs)=>(event)=>{
|
|
62
|
+
theirs == null ? void 0 : theirs(event);
|
|
63
|
+
noteIntent();
|
|
64
|
+
};
|
|
65
|
+
return /*#__PURE__*/ _jsxs(Link, _extends({
|
|
66
|
+
ref: ref,
|
|
67
|
+
href: hrefTo,
|
|
68
|
+
locale: locale,
|
|
69
|
+
passHref: passHref,
|
|
70
|
+
prefetch: prefetch != null ? prefetch : reachedFor ? undefined : false,
|
|
71
|
+
replace: replace,
|
|
72
|
+
scroll: scroll,
|
|
73
|
+
shallow: shallow,
|
|
74
|
+
onPointerEnter: compose(onPointerEnter),
|
|
75
|
+
onTouchStart: compose(onTouchStart),
|
|
76
|
+
onFocus: compose(onFocus)
|
|
77
|
+
}, rest, {
|
|
78
|
+
children: [
|
|
79
|
+
children,
|
|
80
|
+
/*#__PURE__*/ _jsx(LinkNavigationReporter, {})
|
|
81
|
+
]
|
|
82
|
+
}));
|
|
83
|
+
});
|
|
84
|
+
NextLink.displayName = 'NextLink';
|
|
85
|
+
NextLink.aglyn = true;
|
|
86
|
+
export default NextLink;
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=next-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/components/next-link.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2024 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 { styled } from '@mui/material/styles'\nimport Link, { type LinkProps } from 'next/link'\nimport {\n type AnchorHTMLAttributes,\n forwardRef,\n useCallback,\n useState,\n} from 'react'\nimport { LinkNavigationReporter } from './link-navigation-reporter'\n\nexport interface NextAnchorProps\n extends AnchorHTMLAttributes<HTMLAnchorElement> {}\n\n// Add support for the sx prop\nexport const NextAnchor = styled('a', {\n name: 'AglynNextLink',\n})<NextAnchorProps>({})\nNextAnchor.displayName = 'NextAnchor'\nNextAnchor.aglyn = true\n\nexport type NextLinkBaseProps = Omit<NextAnchorProps, 'href'> &\n Omit<LinkProps, 'href'> &\n JSX.OverrideableComponentProps\n\nexport interface NextLinkProps extends NextLinkBaseProps, NextLinkBaseProps {\n hrefTo?: LinkProps['href']\n}\n\nexport const NextLink = forwardRef<any, NextLinkProps>((props, ref) => {\n const {\n href: _2,\n hrefTo,\n replace,\n scroll,\n passHref = true,\n shallow,\n prefetch,\n locale,\n children,\n onPointerEnter,\n onTouchStart,\n onFocus,\n ...rest\n } = props as LinkProps & NextLinkProps\n\n // Next prefetches every link that enters the viewport, and for a statically\n // generated route that means the route's whole RSC payload. On a page whose\n // header links to five destinations, a visitor who reads the page and leaves\n // is served all five anyway — measured at 164.5 KB across 5 requests on the\n // marketing home page, about a sixth of everything that page transfers, and\n // five tenant invocations besides.\n //\n // Prefetching is held until the visitor reaches for a link instead. Pointer,\n // touch and focus are the three ways that happens, and each precedes the\n // click by long enough for the payload to land. Flipping Next's own prop is\n // what re-arms it: `false` suppresses viewport AND hover prefetch in the app\n // router, so leaving it there would move the fetch onto the click itself.\n //\n // An explicit `prefetch` from a caller still decides — `true` for a link\n // worth paying for up front, `false` for one that must never prefetch.\n const [reachedFor, setReachedFor] = useState(false)\n const noteIntent = useCallback(() => setReachedFor(true), [])\n const compose =\n (theirs: ((event: any) => void) | undefined) => (event: any) => {\n theirs?.(event)\n noteIntent()\n }\n\n return (\n <Link\n ref={ref}\n href={hrefTo}\n locale={locale}\n passHref={passHref}\n prefetch={prefetch ?? (reachedFor ? undefined : false)}\n replace={replace}\n scroll={scroll}\n shallow={shallow}\n onPointerEnter={compose(onPointerEnter)}\n onTouchStart={compose(onTouchStart)}\n onFocus={compose(onFocus)}\n {...rest}\n >\n {children}\n {/* null-rendering: drives the global loading overlay off this link's\n real navigation transition (useLinkStatus), not URL-commit. */}\n <LinkNavigationReporter />\n </Link>\n )\n})\n\nNextLink.displayName = 'NextLink'\nNextLink.aglyn = true\n\nexport default NextLink\n"],"names":["styled","Link","forwardRef","useCallback","useState","LinkNavigationReporter","NextAnchor","name","displayName","aglyn","NextLink","props","ref","href","_2","hrefTo","replace","scroll","passHref","shallow","prefetch","locale","children","onPointerEnter","onTouchStart","onFocus","rest","reachedFor","setReachedFor","noteIntent","compose","theirs","event","undefined"],"mappings":";;;AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,MAAM,QAAQ,uBAAsB;AAC7C,OAAOC,UAA8B,YAAW;AAChD,SAEEC,UAAU,EACVC,WAAW,EACXC,QAAQ,QACH,QAAO;AACd,SAASC,sBAAsB,QAAQ,gCAA4B;AAKnE,8BAA8B;AAC9B,OAAO,MAAMC,aAAaN,OAAO,KAAK;IACpCO,MAAM;AACR,GAAoB,CAAC,GAAE;AACvBD,WAAWE,WAAW,GAAG;AACzBF,WAAWG,KAAK,GAAG;AAUnB,OAAO,MAAMC,yBAAWR,WAA+B,CAACS,OAAOC;IAC7D,MAAM,EACJC,MAAMC,EAAE,EACRC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,WAAW,IAAI,EACfC,OAAO,EACPC,QAAQ,EACRC,MAAM,EACNC,QAAQ,EACRC,cAAc,EACdC,YAAY,EACZC,OAAO,EAER,GAAGd,OADCe,wCACDf;;;;;;;;;;;;;;IAEJ,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,mCAAmC;IACnC,EAAE;IACF,6EAA6E;IAC7E,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,EAAE;IACF,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,CAACgB,YAAYC,cAAc,GAAGxB,SAAS;IAC7C,MAAMyB,aAAa1B,YAAY,IAAMyB,cAAc,OAAO,EAAE;IAC5D,MAAME,UACJ,CAACC,SAA+C,CAACC;YAC/CD,0BAAAA,OAASC;YACTH;QACF;IAEF,qBACE,MAAC5B;QACCW,KAAKA;QACLC,MAAME;QACNM,QAAQA;QACRH,UAAUA;QACVE,QAAQ,EAAEA,mBAAAA,WAAaO,aAAaM,YAAY;QAChDjB,SAASA;QACTC,QAAQA;QACRE,SAASA;QACTI,gBAAgBO,QAAQP;QACxBC,cAAcM,QAAQN;QACtBC,SAASK,QAAQL;OACbC;;YAEHJ;0BAGD,KAACjB;;;AAGP,GAAE;AAEFK,SAASF,WAAW,GAAG;AACvBE,SAASD,KAAK,GAAG;AAEjB,eAAeC,SAAQ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 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
|
+
import { type PopperProps as MuiPopperProps } from '@mui/material/Popper';
|
|
18
|
+
import { HTMLAttributes } from 'react';
|
|
19
|
+
export declare const PopperStyledArrowComponent: import("@emotion/styled").StyledComponent<Pick<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<any>, keyof import("react").RefAttributes<any> | keyof HTMLAttributes<HTMLDivElement>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
20
|
+
export interface PopperStyledComponentProps extends MuiPopperProps {
|
|
21
|
+
disableArrow?: boolean;
|
|
22
|
+
arrowGap?: number | string;
|
|
23
|
+
}
|
|
24
|
+
export declare const PopperStyledComponent: import("@emotion/styled").StyledComponent<MuiPopperProps & import("react").RefAttributes<HTMLDivElement> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & PopperStyledComponentProps, {}, {}>;
|
|
25
|
+
export default PopperStyledComponent;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
* Copyright 2023 Aglyn LLC
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
* you may not use this file except in compliance with the License.
|
|
10
|
+
* You may obtain a copy of the License at
|
|
11
|
+
*
|
|
12
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
*
|
|
14
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
* See the License for the specific language governing permissions and
|
|
18
|
+
* limitations under the License.
|
|
19
|
+
*/ import { generateComponentClassKeys, styled } from "@aglyn/shared-ui-theme";
|
|
20
|
+
import { _isEqualitySameType } from "@aglyn/shared-util-tools";
|
|
21
|
+
import MuiPopper from "@mui/material/Popper";
|
|
22
|
+
import clsx from "clsx";
|
|
23
|
+
import { forwardRef } from "react";
|
|
24
|
+
const classKeys = generateComponentClassKeys('AglynPopperStyled', [
|
|
25
|
+
'arrow'
|
|
26
|
+
]);
|
|
27
|
+
export const PopperStyledArrowComponent = styled(/*#__PURE__*/ forwardRef((props, ref)=>{
|
|
28
|
+
const { className } = props, rest = _object_without_properties_loose(props, [
|
|
29
|
+
"className"
|
|
30
|
+
]);
|
|
31
|
+
return /*#__PURE__*/ _jsx("div", _extends({
|
|
32
|
+
ref: ref,
|
|
33
|
+
className: clsx(classKeys.arrow, className)
|
|
34
|
+
}, rest));
|
|
35
|
+
}), {
|
|
36
|
+
name: 'AglynPopperArrow'
|
|
37
|
+
})({
|
|
38
|
+
position: 'absolute',
|
|
39
|
+
fontSize: 7,
|
|
40
|
+
width: '3em',
|
|
41
|
+
height: '3em',
|
|
42
|
+
'&::before': {
|
|
43
|
+
content: '""',
|
|
44
|
+
margin: 'auto',
|
|
45
|
+
display: 'block',
|
|
46
|
+
width: 0,
|
|
47
|
+
height: 0,
|
|
48
|
+
borderStyle: 'solid'
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
export const PopperStyledComponent = styled(MuiPopper, {
|
|
52
|
+
name: 'AglynPopperStyled',
|
|
53
|
+
shouldForwardProp: (prop)=>!_isEqualitySameType(prop, null, 'disableArrow', 'arrowGap')
|
|
54
|
+
})(({ theme, disableArrow, arrowGap = 2 })=>{
|
|
55
|
+
const tv = theme.vars || theme;
|
|
56
|
+
return {
|
|
57
|
+
zIndex: 1,
|
|
58
|
+
'& > div': {
|
|
59
|
+
position: 'relative'
|
|
60
|
+
},
|
|
61
|
+
'&[data-popper-placement*="bottom"]': {
|
|
62
|
+
'& > div': {
|
|
63
|
+
marginTop: !disableArrow ? arrowGap != null ? arrowGap : 2 : 0
|
|
64
|
+
},
|
|
65
|
+
[`& .${classKeys.arrow}`]: {
|
|
66
|
+
top: 0,
|
|
67
|
+
left: 0,
|
|
68
|
+
marginTop: '-0.9em',
|
|
69
|
+
width: '3em',
|
|
70
|
+
height: '1em',
|
|
71
|
+
'&::before': {
|
|
72
|
+
borderWidth: '0 1em 1em 1em',
|
|
73
|
+
borderColor: `transparent transparent ${tv.palette.primary.main} transparent`
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
'&[data-popper-placement*="top"]': {
|
|
78
|
+
'& > div': {
|
|
79
|
+
marginBottom: !disableArrow ? arrowGap != null ? arrowGap : 2 : 0
|
|
80
|
+
},
|
|
81
|
+
[`& .${classKeys.arrow}`]: {
|
|
82
|
+
bottom: 0,
|
|
83
|
+
left: 0,
|
|
84
|
+
marginBottom: '-0.9em',
|
|
85
|
+
width: '3em',
|
|
86
|
+
height: '1em',
|
|
87
|
+
'&::before': {
|
|
88
|
+
borderWidth: '1em 1em 0 1em',
|
|
89
|
+
borderColor: `${tv.palette.primary.main} transparent transparent transparent`
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
'&[data-popper-placement*="right"]': {
|
|
94
|
+
'& > div': {
|
|
95
|
+
marginLeft: !disableArrow ? arrowGap != null ? arrowGap : 2 : 0
|
|
96
|
+
},
|
|
97
|
+
[`& .${classKeys.arrow}`]: {
|
|
98
|
+
left: 0,
|
|
99
|
+
marginLeft: '-0.9em',
|
|
100
|
+
height: '3em',
|
|
101
|
+
width: '1em',
|
|
102
|
+
'&::before': {
|
|
103
|
+
borderWidth: '1em 1em 1em 0',
|
|
104
|
+
borderColor: `transparent ${tv.palette.primary.main} transparent transparent`
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
'&[data-popper-placement*="left"]': {
|
|
109
|
+
'& > div': {
|
|
110
|
+
marginRight: !disableArrow ? arrowGap != null ? arrowGap : 2 : 0
|
|
111
|
+
},
|
|
112
|
+
[`& .${classKeys.arrow}`]: {
|
|
113
|
+
right: 0,
|
|
114
|
+
marginRight: '-0.9em',
|
|
115
|
+
height: '3em',
|
|
116
|
+
width: '1em',
|
|
117
|
+
'&::before': {
|
|
118
|
+
borderWidth: '1em 0 1em 1em',
|
|
119
|
+
borderColor: `transparent transparent transparent ${tv.palette.primary.main}`
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
PopperStyledComponent.displayName = 'PopperStyledComponent';
|
|
126
|
+
PopperStyledComponent.aglyn = true;
|
|
127
|
+
export default PopperStyledComponent;
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=popper-styled.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/components/popper-styled.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2023 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 { generateComponentClassKeys, styled } from '@aglyn/shared-ui-theme'\nimport { _isEqualitySameType } from '@aglyn/shared-util-tools'\nimport MuiPopper, {\n type PopperProps as MuiPopperProps,\n} from '@mui/material/Popper'\nimport clsx from 'clsx'\nimport { forwardRef, HTMLAttributes } from 'react'\n\nconst classKeys = generateComponentClassKeys('AglynPopperStyled', ['arrow'])\n\nexport const PopperStyledArrowComponent = styled(\n forwardRef<any, HTMLAttributes<HTMLDivElement>>((props, ref) => {\n const { className, ...rest } = props\n return (\n <div ref={ref} className={clsx(classKeys.arrow, className)} {...rest} />\n )\n }),\n {\n name: 'AglynPopperArrow',\n },\n)({\n position: 'absolute',\n fontSize: 7,\n width: '3em',\n height: '3em',\n '&::before': {\n content: '\"\"',\n margin: 'auto',\n display: 'block',\n width: 0,\n height: 0,\n borderStyle: 'solid',\n },\n})\n\nexport interface PopperStyledComponentProps extends MuiPopperProps {\n disableArrow?: boolean\n arrowGap?: number | string\n}\n\nexport const PopperStyledComponent = styled(MuiPopper, {\n name: 'AglynPopperStyled',\n shouldForwardProp: (prop) =>\n !_isEqualitySameType(prop, null, 'disableArrow', 'arrowGap'),\n})<PopperStyledComponentProps>(({ theme, disableArrow, arrowGap = 2 }) => {\n const tv = (theme as any).vars || theme\n return {\n zIndex: 1,\n '& > div': {\n position: 'relative',\n },\n '&[data-popper-placement*=\"bottom\"]': {\n '& > div': {\n marginTop: !disableArrow ? arrowGap ?? 2 : 0,\n },\n [`& .${classKeys.arrow}`]: {\n top: 0,\n left: 0,\n marginTop: '-0.9em',\n width: '3em',\n height: '1em',\n '&::before': {\n borderWidth: '0 1em 1em 1em',\n borderColor: `transparent transparent ${tv.palette.primary.main} transparent`,\n },\n },\n },\n '&[data-popper-placement*=\"top\"]': {\n '& > div': {\n marginBottom: !disableArrow ? arrowGap ?? 2 : 0,\n },\n [`& .${classKeys.arrow}`]: {\n bottom: 0,\n left: 0,\n marginBottom: '-0.9em',\n width: '3em',\n height: '1em',\n '&::before': {\n borderWidth: '1em 1em 0 1em',\n borderColor: `${tv.palette.primary.main} transparent transparent transparent`,\n },\n },\n },\n '&[data-popper-placement*=\"right\"]': {\n '& > div': {\n marginLeft: !disableArrow ? arrowGap ?? 2 : 0,\n },\n [`& .${classKeys.arrow}`]: {\n left: 0,\n marginLeft: '-0.9em',\n height: '3em',\n width: '1em',\n '&::before': {\n borderWidth: '1em 1em 1em 0',\n borderColor: `transparent ${tv.palette.primary.main} transparent transparent`,\n },\n },\n },\n '&[data-popper-placement*=\"left\"]': {\n '& > div': {\n marginRight: !disableArrow ? arrowGap ?? 2 : 0,\n },\n [`& .${classKeys.arrow}`]: {\n right: 0,\n marginRight: '-0.9em',\n height: '3em',\n width: '1em',\n '&::before': {\n borderWidth: '1em 0 1em 1em',\n borderColor: `transparent transparent transparent ${tv.palette.primary.main}`,\n },\n },\n },\n }\n})\n\nPopperStyledComponent.displayName = 'PopperStyledComponent'\nPopperStyledComponent.aglyn = true\n\nexport default PopperStyledComponent\n"],"names":["generateComponentClassKeys","styled","_isEqualitySameType","MuiPopper","clsx","forwardRef","classKeys","PopperStyledArrowComponent","props","ref","className","rest","div","arrow","name","position","fontSize","width","height","content","margin","display","borderStyle","PopperStyledComponent","shouldForwardProp","prop","theme","disableArrow","arrowGap","tv","vars","zIndex","marginTop","top","left","borderWidth","borderColor","palette","primary","main","marginBottom","bottom","marginLeft","marginRight","right","displayName","aglyn"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type TypographyProps } from '@mui/material';
|
|
2
|
+
/**
|
|
3
|
+
* A standing "N/M <noun> on your plan" readout for an enforced quota
|
|
4
|
+
* (AGL-2113).
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS. A per-site quota is a plan differentiator the customer is
|
|
7
|
+
* paying for, and most of the console only ever mentioned one at the moment
|
|
8
|
+
* it refused a click — `Product limit reached (100) — upgrade in Billing`.
|
|
9
|
+
* That is the number arriving as a rejection: the operator learns their cap
|
|
10
|
+
* by hitting it, cannot see how close they are before that, and cannot tell
|
|
11
|
+
* whether an upgrade would help without first being blocked. Two cards
|
|
12
|
+
* (`locations-card`, `registers-card`) already rendered a standing readout;
|
|
13
|
+
* five siblings enforcing the same class of quota did not, and this component
|
|
14
|
+
* is what makes that a property of the shared UI rather than of whoever wrote
|
|
15
|
+
* the card.
|
|
16
|
+
*
|
|
17
|
+
* DELIBERATELY PRESENTATIONAL. It takes numbers, not an org doc, and it does
|
|
18
|
+
* NOT call `checkQuota` — this lib may not depend on `@aglyn/aglyn`, and more
|
|
19
|
+
* importantly the caller already holds the quota result it uses to gate its
|
|
20
|
+
* own controls. Recomputing here would let the readout and the gate disagree,
|
|
21
|
+
* which is the AGL-1716 defect (a card whose head-count came from a
|
|
22
|
+
* `limit()`-ed listener while the gate counted properly) in a new place.
|
|
23
|
+
*
|
|
24
|
+
* `ready` IS LOAD-BEARING and is not a nicety. `checkQuota(undefined, …)`
|
|
25
|
+
* resolves the FREE tier rather than "unknown", so a readout rendered before
|
|
26
|
+
* the org doc lands tells a paying customer they are on `0/0`. While `ready`
|
|
27
|
+
* is false this shows the count it does know and says the plan is still being
|
|
28
|
+
* read, which is the honest answer.
|
|
29
|
+
*
|
|
30
|
+
* NOT IN THE BARREL (AGL-1290). Console-only; import by subpath:
|
|
31
|
+
* `@aglyn/shared-ui-jsx/components/quota-readout.component`.
|
|
32
|
+
*/
|
|
33
|
+
export interface QuotaReadoutProps extends Omit<TypographyProps<'div'>, 'children'> {
|
|
34
|
+
/**
|
|
35
|
+
* Whether the plan behind `limit` has actually resolved. False renders the
|
|
36
|
+
* count without a denominator — never a denominator invented from an
|
|
37
|
+
* unresolved org.
|
|
38
|
+
*/
|
|
39
|
+
ready: boolean;
|
|
40
|
+
/** How many of the thing exist right now. */
|
|
41
|
+
used: number;
|
|
42
|
+
/**
|
|
43
|
+
* The plan's cap. `Number.POSITIVE_INFINITY` (which is what `UNLIMITED`
|
|
44
|
+
* is) renders as `∞`. Ignored entirely while `ready` is false.
|
|
45
|
+
*/
|
|
46
|
+
limit: number;
|
|
47
|
+
/** Singular noun, lowercase — e.g. `product`, `redirect`, `record`. */
|
|
48
|
+
noun: string;
|
|
49
|
+
/** Plural, when it is not `noun + 's'` — e.g. `entries` for `entry`. */
|
|
50
|
+
nounPlural?: string;
|
|
51
|
+
/**
|
|
52
|
+
* For a quota that RESETS, the period it counts over — e.g. `this month`.
|
|
53
|
+
*
|
|
54
|
+
* Omitted, the readout says "on your plan", which is true of a standing
|
|
55
|
+
* count (products, redirects) and a lie about a monthly one: `340/500
|
|
56
|
+
* campaign emails on your plan` reads as a lifetime allowance, so a
|
|
57
|
+
* customer at 340 believes they have 160 left forever rather than until
|
|
58
|
+
* the 1st. Supplied, it replaces that tail — `340/500 campaign emails
|
|
59
|
+
* this month`.
|
|
60
|
+
*
|
|
61
|
+
* A string rather than a boolean because the reset window is the caller's
|
|
62
|
+
* fact, not this component's: every monthly counter in the product is
|
|
63
|
+
* keyed `YYYY-MM`, but nothing here reads the counter and a component that
|
|
64
|
+
* hardcoded "month" would be asserting a period it cannot see.
|
|
65
|
+
*/
|
|
66
|
+
period?: string;
|
|
67
|
+
}
|
|
68
|
+
export declare const QuotaReadoutComponent: import("react").ForwardRefExoticComponent<Omit<QuotaReadoutProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
69
|
+
export default QuotaReadoutComponent;
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
*/ 'use client';
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
import { Typography } from "@mui/material";
|
|
21
|
+
import { forwardRef } from "react";
|
|
22
|
+
/** `∞` for an unlimited cap, the number otherwise. */ function formatLimit(limit) {
|
|
23
|
+
return Number.isFinite(limit) ? String(limit) : '∞';
|
|
24
|
+
}
|
|
25
|
+
export const QuotaReadoutComponent = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
26
|
+
const { ready, used, limit, noun, nounPlural, period } = props, rest = _object_without_properties_loose(props, [
|
|
27
|
+
"ready",
|
|
28
|
+
"used",
|
|
29
|
+
"limit",
|
|
30
|
+
"noun",
|
|
31
|
+
"nounPlural",
|
|
32
|
+
"period"
|
|
33
|
+
]);
|
|
34
|
+
const plural = nounPlural != null ? nounPlural : `${noun}s`;
|
|
35
|
+
const word = used === 1 ? noun : plural;
|
|
36
|
+
// A resetting quota says WHEN it resets; a standing one says the count is
|
|
37
|
+
// the plan's. Both tails are about the denominator, so neither renders
|
|
38
|
+
// while `ready` is false and there is no denominator to qualify.
|
|
39
|
+
const tail = period != null ? period : 'on your plan';
|
|
40
|
+
return /*#__PURE__*/ _jsx(Typography, _extends({
|
|
41
|
+
variant: "caption",
|
|
42
|
+
color: "text.secondary",
|
|
43
|
+
component: "div",
|
|
44
|
+
ref: ref
|
|
45
|
+
}, rest, {
|
|
46
|
+
children: ready ? `${used}/${formatLimit(limit)} ${plural} ${tail}` : `${used} ${word} · checking your plan…`
|
|
47
|
+
}));
|
|
48
|
+
});
|
|
49
|
+
QuotaReadoutComponent.displayName = 'QuotaReadoutComponent';
|
|
50
|
+
export default QuotaReadoutComponent;
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=quota-readout.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/components/quota-readout.component.tsx"],"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'use client'\n\nimport { Typography, type TypographyProps } from '@mui/material'\nimport { forwardRef } from 'react'\n\n/**\n * A standing \"N/M <noun> on your plan\" readout for an enforced quota\n * (AGL-2113).\n *\n * WHY THIS EXISTS. A per-site quota is a plan differentiator the customer is\n * paying for, and most of the console only ever mentioned one at the moment\n * it refused a click — `Product limit reached (100) — upgrade in Billing`.\n * That is the number arriving as a rejection: the operator learns their cap\n * by hitting it, cannot see how close they are before that, and cannot tell\n * whether an upgrade would help without first being blocked. Two cards\n * (`locations-card`, `registers-card`) already rendered a standing readout;\n * five siblings enforcing the same class of quota did not, and this component\n * is what makes that a property of the shared UI rather than of whoever wrote\n * the card.\n *\n * DELIBERATELY PRESENTATIONAL. It takes numbers, not an org doc, and it does\n * NOT call `checkQuota` — this lib may not depend on `@aglyn/aglyn`, and more\n * importantly the caller already holds the quota result it uses to gate its\n * own controls. Recomputing here would let the readout and the gate disagree,\n * which is the AGL-1716 defect (a card whose head-count came from a\n * `limit()`-ed listener while the gate counted properly) in a new place.\n *\n * `ready` IS LOAD-BEARING and is not a nicety. `checkQuota(undefined, …)`\n * resolves the FREE tier rather than \"unknown\", so a readout rendered before\n * the org doc lands tells a paying customer they are on `0/0`. While `ready`\n * is false this shows the count it does know and says the plan is still being\n * read, which is the honest answer.\n *\n * NOT IN THE BARREL (AGL-1290). Console-only; import by subpath:\n * `@aglyn/shared-ui-jsx/components/quota-readout.component`.\n */\nexport interface QuotaReadoutProps\n extends Omit<TypographyProps<'div'>, 'children'> {\n /**\n * Whether the plan behind `limit` has actually resolved. False renders the\n * count without a denominator — never a denominator invented from an\n * unresolved org.\n */\n ready: boolean\n /** How many of the thing exist right now. */\n used: number\n /**\n * The plan's cap. `Number.POSITIVE_INFINITY` (which is what `UNLIMITED`\n * is) renders as `∞`. Ignored entirely while `ready` is false.\n */\n limit: number\n /** Singular noun, lowercase — e.g. `product`, `redirect`, `record`. */\n noun: string\n /** Plural, when it is not `noun + 's'` — e.g. `entries` for `entry`. */\n nounPlural?: string\n /**\n * For a quota that RESETS, the period it counts over — e.g. `this month`.\n *\n * Omitted, the readout says \"on your plan\", which is true of a standing\n * count (products, redirects) and a lie about a monthly one: `340/500\n * campaign emails on your plan` reads as a lifetime allowance, so a\n * customer at 340 believes they have 160 left forever rather than until\n * the 1st. Supplied, it replaces that tail — `340/500 campaign emails\n * this month`.\n *\n * A string rather than a boolean because the reset window is the caller's\n * fact, not this component's: every monthly counter in the product is\n * keyed `YYYY-MM`, but nothing here reads the counter and a component that\n * hardcoded \"month\" would be asserting a period it cannot see.\n */\n period?: string\n}\n\n/** `∞` for an unlimited cap, the number otherwise. */\nfunction formatLimit(limit: number): string {\n return Number.isFinite(limit) ? String(limit) : '∞'\n}\n\nexport const QuotaReadoutComponent = forwardRef<\n HTMLDivElement,\n QuotaReadoutProps\n>((props, ref) => {\n const { ready, used, limit, noun, nounPlural, period, ...rest } = props\n const plural = nounPlural ?? `${noun}s`\n const word = used === 1 ? noun : plural\n // A resetting quota says WHEN it resets; a standing one says the count is\n // the plan's. Both tails are about the denominator, so neither renders\n // while `ready` is false and there is no denominator to qualify.\n const tail = period ?? 'on your plan'\n return (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n component=\"div\"\n ref={ref}\n {...rest}\n >\n {ready\n ? `${used}/${formatLimit(limit)} ${plural} ${tail}`\n : `${used} ${word} · checking your plan…`}\n </Typography>\n )\n})\nQuotaReadoutComponent.displayName = 'QuotaReadoutComponent'\n\nexport default QuotaReadoutComponent\n"],"names":["Typography","forwardRef","formatLimit","limit","Number","isFinite","String","QuotaReadoutComponent","props","ref","ready","used","noun","nounPlural","period","rest","plural","word","tail","variant","color","component","displayName"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;;;AAEA,SAASA,UAAU,QAA8B,gBAAe;AAChE,SAASC,UAAU,QAAQ,QAAO;AAsElC,oDAAoD,GACpD,SAASC,YAAYC,KAAa;IAChC,OAAOC,OAAOC,QAAQ,CAACF,SAASG,OAAOH,SAAS;AAClD;AAEA,OAAO,MAAMI,sCAAwBN,WAGnC,CAACO,OAAOC;IACR,MAAM,EAAEC,KAAK,EAAEC,IAAI,EAAER,KAAK,EAAES,IAAI,EAAEC,UAAU,EAAEC,MAAM,EAAW,GAAGN,OAATO,wCAASP;;;;;;;;IAClE,MAAMQ,SAASH,qBAAAA,aAAc,GAAGD,KAAK,CAAC,CAAC;IACvC,MAAMK,OAAON,SAAS,IAAIC,OAAOI;IACjC,0EAA0E;IAC1E,uEAAuE;IACvE,iEAAiE;IACjE,MAAME,OAAOJ,iBAAAA,SAAU;IACvB,qBACE,KAACd;QACCmB,SAAQ;QACRC,OAAM;QACNC,WAAU;QACVZ,KAAKA;OACDM;kBAEHL,QACG,GAAGC,KAAK,CAAC,EAAET,YAAYC,OAAO,CAAC,EAAEa,OAAO,CAAC,EAAEE,MAAM,GACjD,GAAGP,KAAK,CAAC,EAAEM,KAAK,sBAAsB,CAAC;;AAGjD,GAAE;AACFV,sBAAsBe,WAAW,GAAG;AAEpC,eAAef,sBAAqB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2023 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { forwardRef } from "react";
|
|
18
|
+
export const ResizeableStack = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
19
|
+
const { jjj } = props;
|
|
20
|
+
return /*#__PURE__*/ _jsx("div", {});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=resizeable-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/components/resizeable-stack.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2023 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 */\nimport { forwardRef } from 'react'\n\nexport interface ResizeableStackProps extends JSX.OverrideableComponentProps {\n children: JSX.Children\n}\n\nexport const ResizeableStack = forwardRef<any, ResizeableStackProps>(\n (props, ref) => {\n const { jjj } = props\n\n return <div></div>\n },\n)\n"],"names":["forwardRef","ResizeableStack","props","ref","jjj","div"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GACD,SAASA,UAAU,QAAQ,QAAO;AAMlC,OAAO,MAAMC,gCAAkBD,WAC7B,CAACE,OAAOC;IACN,MAAM,EAAEC,GAAG,EAAE,GAAGF;IAEhB,qBAAO,KAACG;AACV,GACD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface RowActionsMenuItem {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
/**
|
|
7
|
+
* Where the item navigates. An item that carries one renders as a real
|
|
8
|
+
* anchor, so it can be middle-clicked into a new tab, copied, or opened
|
|
9
|
+
* from the browser's own context menu — the affordances a click handler
|
|
10
|
+
* cannot offer however faithfully it calls `router.push`.
|
|
11
|
+
*/
|
|
12
|
+
href?: string;
|
|
13
|
+
/** `href` leaves the console, so it opens in a new tab. */
|
|
14
|
+
external?: boolean;
|
|
15
|
+
/** For items that open a dialog rather than navigate. */
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
/** Renders the row in the error colour, for destructive actions. */
|
|
18
|
+
destructive?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Why the item cannot be used, shown as its tooltip. Mirrors the quick
|
|
22
|
+
* action's `unavailableReason`: a control that is present but inert says
|
|
23
|
+
* nothing on its own, and an absent one and an inapplicable one look alike.
|
|
24
|
+
*/
|
|
25
|
+
disabledReason?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface RowActionsMenuProps {
|
|
28
|
+
items: RowActionsMenuItem[];
|
|
29
|
+
/** Distinguishes this row's menu for screen readers. */
|
|
30
|
+
label?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Overflow menu for a table row's secondary actions (AGL-701).
|
|
34
|
+
*
|
|
35
|
+
* The DataGrid lists get this from `GridActionsCellItem showInMenu`, but the
|
|
36
|
+
* screens table is hand-rolled markup driven by a `renderRowActions`
|
|
37
|
+
* render-prop, so `showInMenu` is not available to it and it needs a real
|
|
38
|
+
* menu of its own.
|
|
39
|
+
*
|
|
40
|
+
* Every handler closes the menu first. Delete opens a confirmation, and a
|
|
41
|
+
* menu left standing over that dialog reads as though the click missed.
|
|
42
|
+
*
|
|
43
|
+
* An item that names an `href` is an ANCHOR, not a handler — a navigation
|
|
44
|
+
* action must be middle-clickable and copyable like any other link. It still
|
|
45
|
+
* renders as a menu item: the anchor is the MenuItem's own root element, so
|
|
46
|
+
* it inherits the item's colour, padding and focus ring rather than the
|
|
47
|
+
* browser's link styling.
|
|
48
|
+
*/
|
|
49
|
+
export declare function RowActionsMenu(props: RowActionsMenuProps): import("react").JSX.Element;
|
|
50
|
+
export declare namespace RowActionsMenu {
|
|
51
|
+
var displayName: string;
|
|
52
|
+
}
|
|
53
|
+
export default RowActionsMenu;
|