intermediate loader

This commit is contained in:
Nate Kelley 2025-02-21 09:31:14 -07:00
parent dc57a521e9
commit 289a57cc10
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
12 changed files with 51 additions and 60 deletions

18
web/package-lock.json generated
View File

@ -41,6 +41,7 @@
"chartjs-plugin-trendline": "^2.1.6", "chartjs-plugin-trendline": "^2.1.6",
"chartjs-plugin-zoom": "^2.2.0", "chartjs-plugin-zoom": "^2.2.0",
"chartjs-react": "^4.3.0", "chartjs-react": "^4.3.0",
"clsx": "^2.1.1",
"cookies-next": "^4.2.1", "cookies-next": "^4.2.1",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"dom-to-image": "^2.6.0", "dom-to-image": "^2.6.0",
@ -6838,6 +6839,15 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1" "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
} }
}, },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/co": { "node_modules/co": {
"version": "4.6.0", "version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@ -15918,14 +15928,6 @@
"react-dom": "^18.0 || ^19.0" "react-dom": "^18.0 || ^19.0"
} }
}, },
"node_modules/react-data-grid/node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"engines": {
"node": ">=6"
}
},
"node_modules/react-dom": { "node_modules/react-dom": {
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",

View File

@ -48,6 +48,7 @@
"chartjs-plugin-trendline": "^2.1.6", "chartjs-plugin-trendline": "^2.1.6",
"chartjs-plugin-zoom": "^2.2.0", "chartjs-plugin-zoom": "^2.2.0",
"chartjs-react": "^4.3.0", "chartjs-react": "^4.3.0",
"clsx": "^2.1.1",
"cookies-next": "^4.2.1", "cookies-next": "^4.2.1",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"dom-to-image": "^2.6.0", "dom-to-image": "^2.6.0",

View File

@ -1,8 +1,9 @@
import React from 'react'; import React from 'react';
import { IndeterminateLinearLoader } from '@/components/ui/loaders/IndeterminateLinearLoader';
export default function TestPage() { export default function TestPage() {
return ( return (
<div className="flex flex-col gap-4 bg-red-500"> <div className="flex flex-col gap-4">
<div className="flex flex-col space-y-5"> <div className="flex flex-col space-y-5">
<div>Test</div> <div>Test</div>
<div>TESTING!</div> <div>TESTING!</div>
@ -17,6 +18,12 @@ export default function TestPage() {
<a>This is a not link</a> <a>This is a not link</a>
<a href="https://www.google.com">This is a link</a> <a href="https://www.google.com">This is a link</a>
</div> </div>
<div className="!mt-5 flex flex-col gap-4">
<IndeterminateLinearLoader />
<IndeterminateLinearLoader />
<IndeterminateLinearLoader />
<IndeterminateLinearLoader />
</div>
</div> </div>
); );
} }

View File

@ -3,7 +3,7 @@
import React, { useMemo, useRef, useState } from 'react'; import React, { useMemo, useRef, useState } from 'react';
import { BusterResizeableGridRow } from './interfaces'; import { BusterResizeableGridRow } from './interfaces';
import { BusterResizeColumns } from './BusterResizeColumns'; import { BusterResizeColumns } from './BusterResizeColumns';
import classNames from 'classnames'; import clsx from 'clsx';
import { BusterNewItemDropzone } from './_BusterBusterNewItemDropzone'; import { BusterNewItemDropzone } from './_BusterBusterNewItemDropzone';
import { MIN_ROW_HEIGHT, TOP_SASH_ID, NEW_ROW_ID, MAX_ROW_HEIGHT } from './config'; import { MIN_ROW_HEIGHT, TOP_SASH_ID, NEW_ROW_ID, MAX_ROW_HEIGHT } from './config';
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
@ -57,10 +57,10 @@ export const BusterResizeRows: React.FC<{
return ( return (
<div <div
ref={ref} ref={ref}
className={classNames( className={clsx(
className,
'buster-resize-row relative', 'buster-resize-row relative',
'mb-10 flex h-full w-full flex-col space-y-3 transition', 'mb-10 flex h-full w-full flex-col space-y-3 transition',
className,
'opacity-100' 'opacity-100'
)}> )}>
<ResizeRowHandle <ResizeRowHandle
@ -223,7 +223,7 @@ const ResizeRowHandle: React.FC<{
id={id} id={id}
className={cx( className={cx(
showDropzone && allowEdit && dropzoneStyles.dropzone, showDropzone && allowEdit && dropzoneStyles.dropzone,
'h-[4px] w-2 w-full select-none rounded-sm', 'h-[4px] w-full rounded-sm select-none',
allowEdit && styles.dragger, allowEdit && styles.dragger,
!top && 'dragger absolute', !top && 'dragger absolute',
showActive && 'active' showActive && 'active'

View File

@ -18,7 +18,7 @@ import {
import { arrayMove } from '@dnd-kit/sortable'; import { arrayMove } from '@dnd-kit/sortable';
import { BusterSortableOverlay } from './_BusterSortableOverlay'; import { BusterSortableOverlay } from './_BusterSortableOverlay';
import { BusterResizeableGridRow } from './interfaces'; import { BusterResizeableGridRow } from './interfaces';
import classNames from 'classnames'; import clsx from 'clsx';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { useMemoizedFn } from 'ahooks'; import { useMemoizedFn } from 'ahooks';
import isEqual from 'lodash/isEqual'; import isEqual from 'lodash/isEqual';
@ -331,7 +331,7 @@ export const BusterResizeableGrid: React.FC<{
onDragCancel={onDragCancel} onDragCancel={onDragCancel}
collisionDetection={collisionDetectionStrategy} collisionDetection={collisionDetectionStrategy}
sensors={sensors}> sensors={sensors}>
<div className={classNames('h-full w-full', 'buster-resizeable-grid', className)}> <div className={clsx('h-full w-full', 'buster-resizeable-grid', className)}>
<BusterResizeRows <BusterResizeRows
rows={rows} rows={rows}
className={className} className={className}

View File

@ -1,10 +1,8 @@
import { DragOverlay, defaultDropAnimationSideEffects } from '@dnd-kit/core'; import { DragOverlay, defaultDropAnimationSideEffects } from '@dnd-kit/core';
import type { DropAnimation, Modifier } from '@dnd-kit/core'; import type { DropAnimation, Modifier } from '@dnd-kit/core';
import { createStyles } from 'antd-style';
import { BusterSortableItemContent } from './_BusterSortableItemContent'; import { BusterSortableItemContent } from './_BusterSortableItemContent';
import { animate } from 'framer-motion'; import { animate } from 'framer-motion';
import React, { PropsWithChildren, useEffect, useMemo } from 'react'; import React, { useEffect, useMemo } from 'react';
import classNames from 'classnames';
import { BusterResizeableGridRow } from './interfaces'; import { BusterResizeableGridRow } from './interfaces';
import { snapCenterToCursor } from '@dnd-kit/modifiers'; import { snapCenterToCursor } from '@dnd-kit/modifiers';
import { NUMBER_OF_COLUMNS } from './config'; import { NUMBER_OF_COLUMNS } from './config';

View File

@ -1,5 +1,5 @@
import { createStyles } from 'antd-style';
import React from 'react'; import React from 'react';
import { twMerge } from 'tailwind-merge';
export const IndeterminateLinearLoader: React.FC<{ export const IndeterminateLinearLoader: React.FC<{
className?: string; className?: string;
@ -8,27 +8,21 @@ export const IndeterminateLinearLoader: React.FC<{
trackColor?: string; trackColor?: string;
valueColor?: string; valueColor?: string;
}> = React.memo(({ className = '', trackColor, valueColor, style, height = 2 }) => { }> = React.memo(({ className = '', trackColor, valueColor, style, height = 2 }) => {
const { styles, cx } = useStyles(); // const { styles, cx } = useStyles();
return ( return (
<div <div
className={`indeterminate-progress-bar ${className}`} className={`h-1.5 w-full overflow-hidden bg-gray-200 ${className}`}
style={{ ...style, height, backgroundColor: trackColor }}> style={{ ...style, height, backgroundColor: trackColor }}>
<div <div
className={cx(styles.track, 'indeterminate-progress-bar-value')} className={twMerge(
style={{ 'bg-primary',
backgroundColor: valueColor 'animate-indeterminate-progress-bar h-full w-full origin-left'
}} )}
style={{ backgroundColor: valueColor }}
/> />
</div> </div>
); );
}); });
IndeterminateLinearLoader.displayName = 'IndeterminateLinearLoader'; IndeterminateLinearLoader.displayName = 'IndeterminateLinearLoader';
const useStyles = createStyles(({ css, token }) => ({
track: css`
background: ${token.colorPrimary};
opacity: 0.6;
`
}));

View File

@ -1 +0,0 @@
export const BUSTER_APP_FONT_FAMILY = 'Roobert_Pro';

View File

@ -1,26 +0,0 @@
.indeterminate-progress-bar {
height: 4px;
//background-color: rgba(202, 202, 202, 0.2);
width: 100%;
overflow: hidden;
}
.indeterminate-progress-bar-value {
width: 100%;
height: 100%;
background-color: rgb(112, 112, 112);
animation: indeterminateAnimation 1s infinite linear;
transform-origin: 0% 50%;
}
@keyframes indeterminateAnimation {
0% {
transform: translateX(0) scaleX(0);
}
40% {
transform: translateX(0) scaleX(0.4);
}
100% {
transform: translateX(100%) scaleX(0.5);
}
}

View File

@ -2,7 +2,6 @@
@import './tailwind'; @import './tailwind';
@import './antd'; @import './antd';
@import './sql'; @import './sql';
@import './loaders';
@import './monaco'; @import './monaco';
@import '../components/ui/layout/AppSplitter/SplitPane/themes/default'; @import '../components/ui/layout/AppSplitter/SplitPane/themes/default';
@import 'react-data-grid/lib/styles.css'; @import 'react-data-grid/lib/styles.css';

View File

@ -32,6 +32,8 @@
--color-primary-dark: #6d28d9; --color-primary-dark: #6d28d9;
} }
@import './tailwindAnimations.css';
body { body {
background: 'blue' !important; background: 'blue' !important;
} }

View File

@ -0,0 +1,15 @@
@theme {
/* animations */
--animate-indeterminate-progress-bar: indeterminate-progress-bar 1s infinite linear;
@keyframes indeterminate-progress-bar {
0% {
transform: translateX(0) scaleX(0);
}
40% {
transform: translateX(0) scaleX(0.4);
}
100% {
transform: translateX(100%) scaleX(0.5);
}
}
}