@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
554 lines (553 loc) • 16.9 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import * as React from 'react';
import ArrowRight from './arrow-right';
import ArrowDown from './arrow-down';
import ArrowUp from './arrow-up';
import ArrowUpLong from './arrow-up-long';
import ArrowDownLong from './arrow-down-long';
import ArrowLeft from './arrow-left';
import TriangleUp from './triangle-up';
import TriangleDown from './triangle-down';
import Check from './check';
import AttachFile from './attach-file';
import Plus from './plus';
import Person from './person';
import Clone from './clone';
import Chat from './chat';
import Query from './query';
import Info from './info';
import Alert from './alert';
import List from './list';
import Home from './home';
import Call from './call';
import Justify from './justify';
import Err from './error';
import Export from './export';
import FDC3 from './fdc3';
import Campaign from './campaign';
import Build from './build';
import Warning from './warning';
import Dashboard from './dashboard';
import Undo from './undo';
import FastForward from './fast-forward';
import FastBackward from './fast-backward';
import SortAsc from './sort-asc';
import SortDesc from './sort-desc';
import Calendar from './calendar';
import Delete from './delete';
import CSV from './csv';
import Excel from './excel';
import CheckCircle from './check-circle';
import Refresh from './refresh';
import Save from './save';
import Chart from './chart';
import Application from './application';
import BulkUpdate from './bulk-update';
import ImportExport from './import-export';
import Import from './import';
import CalculatedColumn from './calculated-column';
import CellSummary from './cell-summary';
import ColumnChooser from './column-chooser';
import ColumnAdd from './column-add';
import CellValidation from './cell-validation';
import ColumnFilter from './column-filter';
import ColumnOutline from './column-outline';
import SystemStatus from './system-status';
import DataSet from './data-set';
import DataObject from './data-object';
import FlashingCell from './flashing-cell';
import edit from './edit';
import Equation from './equation';
import FormatColumn from './format-column';
import ExportData from './table-arrow-right';
import FreetextColumn from './freetext-column';
import comment from './comment';
import Layout from './layout';
import StateManagement from './state-management';
import ToolPanel from './tool-panel';
import PercentBar from './percent-bar';
import Sparkline from './spark-line';
import BulletChart from './bullet-chart';
import RangeBar from './range-bar';
import IconStyleGlyph from './icon-style';
import Star from './star';
import Resume from './resume';
import PieChart from './pie-chart';
import PlusMinus from './plus-minus';
import QuickSearch from './quick-search';
import Reminder from './reminder';
import Schedule from './schedule';
import Inspector from './inspector';
import Shortcut from './shortcut';
import UpdatedRow from './updated-row';
import logout from './logout';
import Theme from './theme';
import checkBox from './check-box';
import checkBoxOutline from './check-box-outline';
import booleanList from './boolean-list';
import tabUnselected from './tab-unselected';
import CloudUpload from './cloud-upload';
import Upload from './upload';
import ipushpull from './ipushpull';
import FolderOpen from './folder-open';
import OpenInNew from './open-in-new';
import Folder from './folder';
import FolderShared from './folder-shared';
import Play from './play';
import Stop from './stop';
import Pause from './pause';
import NewPage from './newpage';
import Drag from './drag';
import HideColumn from './hide-column';
import ShowColumn from './show-column';
import DateRange from './date-range';
import Settings from './settings';
import Dock from './dock';
import Collapse from './collapse';
import Expand from './expand';
import ArrowExpand from './arrow-expand';
import History from './history';
import Filter from './filter';
import FilterOff from './filter-off';
import Close from './close';
import Function from './function';
import GreaterThanOrEqual from './greater-than-or-equal';
import GreaterThan from './greater-than';
import LessThanOrEqual from './less-than-or-equal';
import LessThan from './less-than';
import Minus from './minus';
import Multiplication from './multiplication';
import Division from './division';
import Percent from './percent';
import Exponent from './exponent';
import Equal from './equal';
import NotEqual from './not-equal';
import EndsWith from './ends-with';
import StartsWith from './starts-with';
import Blanks from './blanks';
import NonBlanks from './non-blanks';
import Contains from './contains';
import NotContains from './not-contains';
import Regex from './regex';
import TrackChanges from './track-changes';
import Menu from './menu';
import StatusBar from './statusbar';
import AddRow from './add-row';
import Brush from './brush';
import Gradient from './gradient';
import Badge from './badge';
import Italic from './italic';
import Bold from './bold';
import AlignLeft from './align-left';
import AlignRight from './align-right';
import AlignCenter from './align-center';
import Overline from './overline';
import Underline from './underline';
import Strikethrough from './strikethrough';
import Lowercase from './case-lower';
import Uppercase from './case-upper';
import SentenceCase from './case-sentence';
import GridFilter from './grid-filter';
import GridInfo from './grid-info';
import Rows from './rows';
import Quote from './quote';
import News from './news';
import Instrument from './instrument';
import Analysis from './analysis';
import Visibility from './visibility';
import VisibilityOff from './visibility-off';
import Mail from './mail';
import Dollar from './dollar';
import Organisation from './organisation';
import Science from './science';
import Interactions from './interactions';
import Money from './money';
import Order from './order';
import Contact from './contact';
import Note from './note';
import Comments from './comments';
import SelectAll from './select-all';
import SelectOff from './select-off';
import SelectFwd from './select-fwd';
import Copy from './copy';
import ExpandAll from './expand-all';
import CollapseAll from './collapse-all';
import Sync from './sync';
import StyledGrid from './styled-grid';
import { isAdaptableCustomIcon, isAdaptableSystemIcon } from '../Icon';
import { AdaptableLogger } from '../../agGrid/AdaptableLogger';
export const allIcons = {
search: Query,
grid: Layout,
cells: CellSummary,
columns: ColumnChooser,
copy: Copy,
'calculated-column': CalculatedColumn,
laptop: Application,
alert: Alert,
building: Analysis,
'edit-table': BulkUpdate,
chart: Chart,
'column-add': ColumnAdd,
person: Person,
quote: Quote,
call: Call,
news: News,
brush: Brush,
'data-set': DataSet,
excel: Excel,
json: DataObject,
export: Export,
broadcast: Campaign,
theme: Theme,
brain: Instrument,
calendar: Calendar,
chat: Chat,
'filter-list': ColumnFilter,
'column-outline': ColumnOutline,
'grid-filter': GridFilter,
'grid-info': GridInfo,
filter: Filter,
'filter-off': FilterOff,
'search-table': QuickSearch,
lightning: FlashingCell,
'color-palette': FormatColumn,
'export-data': ExportData,
'horizontal-lines': FreetextColumn,
'percent-tag': PercentBar,
'spark-line': Sparkline,
resume: Resume,
csv: CSV,
'pie-chart': PieChart,
'add-circle': PlusMinus,
reminder: Reminder,
schedule: Schedule,
link: Shortcut,
assignment: StateManagement,
clipboard: ToolPanel,
'traffic-lights': SystemStatus,
add: AddRow,
downloaded: UpdatedRow,
edit: edit,
undo: Undo,
clone: Clone,
save: Save,
refresh: Refresh,
delete: Delete,
'tab-unselected': tabUnselected,
'select-all': SelectAll,
'select-off': SelectOff,
'select-fwd': SelectFwd,
checked: checkBox,
unchecked: checkBoxOutline,
'boolean-list': booleanList,
'arrow-right': ArrowRight,
'arrow-left': ArrowLeft,
'arrow-up': ArrowUp,
'arrow-down': ArrowDown,
'arrow-up-long': ArrowUpLong,
'arrow-down-long': ArrowDownLong,
'triangle-up': TriangleUp,
'triangle-down': TriangleDown,
'check-circle': CheckCircle,
comment,
list: List,
spanner: Build,
error: Err,
play: Play,
stop: Stop,
pause: Pause,
'fast-forward': FastForward,
'fast-backward': FastBackward,
warning: Warning,
check: Check,
'open-in-new': OpenInNew,
home: Home,
'sort-asc': SortAsc,
'sort-desc': SortDesc,
logout: logout,
'import-export': ImportExport,
import: Import,
inspector: Inspector,
paperclip: AttachFile,
info: Info,
'cloud-upload': CloudUpload,
upload: Upload,
download: ipushpull,
'folder-open': FolderOpen,
'folder-shared': FolderShared,
folder: Folder,
newpage: NewPage,
drag: Drag,
'date-range': DateRange,
settings: Settings,
dock: Dock,
collapse: Collapse,
expand: Expand,
'arrow-expand': ArrowExpand,
history: History,
close: Close,
function: Function,
equation: Equation,
equals: Equal,
'not-equal': NotEqual,
'greater-than-or-equal': GreaterThanOrEqual,
'greater-than': GreaterThan,
'less-than-or-equal': LessThanOrEqual,
'less-than': LessThan,
plus: Plus,
minus: Minus,
multiplication: Multiplication,
division: Division,
percent: Percent,
exponent: Exponent,
'ends-with': EndsWith,
'starts-with': StartsWith,
'unfilled-circle': Blanks,
'filled-circle': NonBlanks,
'not-contains': NotContains,
contains: Contains,
regex: Regex,
target: TrackChanges,
menu: Menu,
statusbar: StatusBar,
dashboard: Dashboard,
'visibility-on': Visibility,
'visibility-off': VisibilityOff,
'visibility-off-bold': HideColumn,
'visibility-on-bold': ShowColumn,
gradient: Gradient,
badge: Badge,
'bullet-chart': BulletChart,
'range-bar': RangeBar,
'icon-style': IconStyleGlyph,
star: Star,
bold: Bold,
italic: Italic,
'align-left': AlignLeft,
'align-right': AlignRight,
'align-center': AlignCenter,
'align-justify': Justify,
underline: Underline,
overline: Overline,
strikethrough: Strikethrough,
'case-lower': Lowercase,
'case-upper': Uppercase,
'case-sentence': SentenceCase,
flag: CellValidation,
fdc3: FDC3,
mail: Mail,
dollar: Dollar,
organisation: Organisation,
science: Science,
interactions: Interactions,
money: Money,
order: Order,
contact: Contact,
note: Note,
comments: Comments,
rows: Rows,
'expand-all': ExpandAll,
'collapse-all': CollapseAll,
sync: Sync,
'styled-grid': StyledGrid,
};
Object.keys(allIcons).forEach((name) => {
const ReactCmp = allIcons[name];
allIcons[name] = (props) => _jsx(ReactCmp, { ...props, name: name });
});
export const Icon = ({ name, style, className, tabIndex, ...props }) => {
const IconCmp = (allIcons[name] || null);
if (!IconCmp) {
AdaptableLogger.consoleWarnBase('NO icon found for ' + name);
return _jsx("svg", { height: "17", width: "17" });
}
return _jsx(IconCmp, { tabIndex: tabIndex, ...props, style: style, name: name, className: className });
};
export const NaturallySizedIcon = (props) => {
return _jsx(Icon, { ...props, size: '1.5em', style: { marginTop: '-0.125em', ...props.style } });
};
const SVG_KEEP_AS_IS = new Set([
'viewBox',
'preserveAspectRatio',
'gradientUnits',
'gradientTransform',
'patternUnits',
'patternContentUnits',
'patternTransform',
'maskUnits',
'maskContentUnits',
'markerUnits',
'markerWidth',
'markerHeight',
'attributeName',
'attributeType',
'spreadMethod',
'baseProfile',
'repeatCount',
]);
const REACT_TO_HTML_ATTR = {
className: 'class',
htmlFor: 'for',
tabIndex: 'tabindex',
acceptCharset: 'accept-charset',
};
const UNITLESS_CSS_PROPS = new Set([
'animationIterationCount',
'borderImageOutset',
'borderImageSlice',
'borderImageWidth',
'boxFlex',
'boxFlexGroup',
'boxOrdinalGroup',
'columnCount',
'columns',
'flex',
'flexGrow',
'flexPositive',
'flexShrink',
'flexNegative',
'flexOrder',
'fontWeight',
'gridArea',
'gridRow',
'gridRowEnd',
'gridRowSpan',
'gridRowStart',
'gridColumn',
'gridColumnEnd',
'gridColumnSpan',
'gridColumnStart',
'lineClamp',
'lineHeight',
'opacity',
'order',
'orphans',
'tabSize',
'widows',
'zIndex',
'zoom',
'fillOpacity',
'floodOpacity',
'stopOpacity',
'strokeDasharray',
'strokeDashoffset',
'strokeMiterlimit',
'strokeOpacity',
'strokeWidth',
]);
const HTML_VOID_TAGS = new Set([
'area',
'base',
'br',
'col',
'embed',
'hr',
'img',
'input',
'link',
'meta',
'param',
'source',
'track',
'wbr',
]);
const camelToKebab = (s) => s.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase());
const escapeAttr = (s) => s.replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<');
const escapeText = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
const styleObjectToString = (style) => {
const parts = [];
for (const key in style) {
const raw = style[key];
if (raw == null || raw === false)
continue;
const cssKey = key.startsWith('--') ? key : camelToKebab(key);
let cssVal;
if (typeof raw === 'number' && raw !== 0 && !UNITLESS_CSS_PROPS.has(key)) {
cssVal = `${raw}px`;
}
else {
cssVal = String(raw);
}
parts.push(`${cssKey}:${cssVal}`);
}
return parts.join(';');
};
const propToAttrName = (key) => {
if (REACT_TO_HTML_ATTR[key])
return REACT_TO_HTML_ATTR[key];
if (key.startsWith('data-') || key.startsWith('aria-'))
return key;
if (SVG_KEEP_AS_IS.has(key))
return key;
return /[A-Z]/.test(key) ? camelToKebab(key) : key;
};
const reactElementToString = (node) => {
if (node == null || typeof node === 'boolean')
return '';
if (typeof node === 'string')
return escapeText(node);
if (typeof node === 'number')
return String(node);
if (Array.isArray(node))
return node.map(reactElementToString).join('');
if (!React.isValidElement(node))
return '';
const { type, props } = node;
if (type === React.Fragment) {
return reactElementToString(props.children);
}
if (typeof type === 'function') {
return reactElementToString(type(props));
}
if (typeof type !== 'string')
return '';
const attrs = [];
let innerHtml = '';
for (const key in props) {
if (key === 'children' || key === 'key' || key === 'ref')
continue;
const value = props[key];
if (value == null || value === false)
continue;
if (key === 'style') {
const css = typeof value === 'string' ? value : styleObjectToString(value);
if (css)
attrs.push(`style="${escapeAttr(css)}"`);
continue;
}
if (key === 'dangerouslySetInnerHTML') {
innerHtml = value?.__html ?? '';
continue;
}
const attrName = propToAttrName(key);
if (value === true) {
attrs.push(attrName);
}
else {
attrs.push(`${attrName}="${escapeAttr(String(value))}"`);
}
}
const attrStr = attrs.length ? ' ' + attrs.join(' ') : '';
const childHtml = innerHtml || reactElementToString(props.children);
if (HTML_VOID_TAGS.has(type)) {
return `<${type}${attrStr}/>`;
}
return `<${type}${attrStr}>${childHtml}</${type}>`;
};
export const iconToString = (icon, style) => {
if (!icon) {
return;
}
const mergedStyle = { ...icon.style, ...style };
if (isAdaptableSystemIcon(icon) && icon.name in allIcons) {
const IconCmp = allIcons[icon.name];
return reactElementToString(_jsx(IconCmp, { "aria-hidden": "true", name: icon.name, size: icon.size, style: mergedStyle, className: icon.className }));
}
if (isAdaptableCustomIcon(icon)) {
const width = mergedStyle.width ?? 'var(--ab-cmp-icon__width)';
const height = mergedStyle.height ?? 'var(--ab-cmp-icon__height)';
return reactElementToString(_jsx("img", { src: icon.src, className: icon.className, style: { height, width, ...mergedStyle } }));
}
return undefined;
};