@deephaven/plugin 1.2.1-beta.0 → 1.2.1-beta.1
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/dist/PluginTypes.d.ts
CHANGED
|
@@ -172,8 +172,10 @@ export interface ThemePlugin extends Plugin {
|
|
|
172
172
|
export declare function isThemePlugin(plugin: PluginModule): plugin is ThemePlugin;
|
|
173
173
|
export type ElementName = string;
|
|
174
174
|
/** A mapping of element names to their React components. */
|
|
175
|
-
export type ElementPluginMappingDefinition
|
|
176
|
-
|
|
175
|
+
export type ElementPluginMappingDefinition<P extends Record<ElementName, unknown> = Record<string, never>> = {
|
|
176
|
+
[K in keyof P]: React.ComponentType<P[K]>;
|
|
177
|
+
};
|
|
178
|
+
export type ElementMap<P extends Record<string, unknown> = Record<string, never>> = ReadonlyMap<keyof P extends never ? string : keyof P, React.ComponentType<P[keyof P]>>;
|
|
177
179
|
/** An element plugin is used by deephaven.ui to render custom components
|
|
178
180
|
* The mapping contains the element names as keys and the React components as values.
|
|
179
181
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginTypes.d.ts","sourceRoot":"","sources":["../src/PluginTypes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PluginTypes.d.ts","sourceRoot":"","sources":["../src/PluginTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/PluginTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginTypes.js","names":["PluginType","Object","freeze","AUTH_PLUGIN","DASHBOARD_PLUGIN","WIDGET_PLUGIN","TABLE_PLUGIN","THEME_PLUGIN","ELEMENT_PLUGIN","isLegacyDashboardPlugin","plugin","isLegacyAuthPlugin","isLegacyTablePlugin","isLegacyPlugin","isDashboardPlugin","type","isWidgetPlugin","isTablePlugin","isAuthPlugin","isThemePlugin","isElementPlugin","isPlugin"],"sources":["../src/PluginTypes.ts"],"sourcesContent":["import type { BaseThemeType } from '@deephaven/components';\nimport {\n type EventEmitter,\n type ItemContainer,\n} from '@deephaven/golden-layout';\nimport type { dh } from '@deephaven/jsapi-types';\nimport type { IconDefinition } from '@fortawesome/fontawesome-common-types';\nimport type { TablePluginComponent } from './TablePlugin';\n\nexport const PluginType = Object.freeze({\n AUTH_PLUGIN: 'AuthPlugin',\n DASHBOARD_PLUGIN: 'DashboardPlugin',\n WIDGET_PLUGIN: 'WidgetPlugin',\n TABLE_PLUGIN: 'TablePlugin',\n THEME_PLUGIN: 'ThemePlugin',\n ELEMENT_PLUGIN: 'ElementPlugin',\n});\n\n/**\n * @deprecated Use DashboardPlugin instead\n */\nexport type LegacyDashboardPlugin = { DashboardPlugin: React.ComponentType };\n\nexport function isLegacyDashboardPlugin(\n plugin: PluginModule\n): plugin is LegacyDashboardPlugin {\n return 'DashboardPlugin' in plugin;\n}\n\n/**\n * @deprecated Use AuthPlugin instead\n */\nexport type LegacyAuthPlugin = {\n AuthPlugin: {\n Component: React.ComponentType<AuthPluginProps>;\n isAvailable: (authHandlers: string[], authConfig: AuthConfigMap) => boolean;\n };\n};\n\nexport function isLegacyAuthPlugin(\n plugin: PluginModule\n): plugin is LegacyAuthPlugin {\n return 'AuthPlugin' in plugin;\n}\n\nexport type PluginModuleMap = Map<string, VersionedPluginModule>;\n\n/**\n * @deprecated Use TablePlugin instead\n */\nexport type LegacyTablePlugin = {\n TablePlugin: TablePluginComponent;\n};\n\nexport function isLegacyTablePlugin(\n plugin: PluginModule\n): plugin is LegacyTablePlugin {\n return 'TablePlugin' in plugin;\n}\n\n/**\n * @deprecated Use Plugin instead\n */\nexport type LegacyPlugin =\n | LegacyDashboardPlugin\n | LegacyAuthPlugin\n | LegacyTablePlugin;\n\nexport function isLegacyPlugin(plugin: unknown): plugin is LegacyPlugin {\n return (\n isLegacyDashboardPlugin(plugin as PluginModule) ||\n isLegacyAuthPlugin(plugin as PluginModule) ||\n isLegacyTablePlugin(plugin as PluginModule)\n );\n}\n\nexport type PluginModule = Plugin | LegacyPlugin;\n\nexport type VersionedPluginModule = PluginModule & { version?: string };\n\nexport interface Plugin {\n /**\n * The name of the plugin. This will be used as an identifier for the plugin and should be unique.\n */\n name: string;\n\n /**\n * The type of plugin.\n */\n type: (typeof PluginType)[keyof typeof PluginType];\n}\n\n/**\n * A plugin that will be mounted to the dashboard.\n */\nexport interface DashboardPlugin extends Plugin {\n type: typeof PluginType.DASHBOARD_PLUGIN;\n /**\n * The component to mount for the dashboard plugin.\n * This component is used to initialize the plugin and will only be mounted to the dashboard once.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: React.ComponentType<any>;\n}\n\nexport function isDashboardPlugin(\n plugin: PluginModule\n): plugin is DashboardPlugin {\n return 'type' in plugin && plugin.type === PluginType.DASHBOARD_PLUGIN;\n}\n\nexport interface WidgetComponentProps<T = unknown> {\n /**\n * Function to fetch the widget data.\n * @returns A promise that resolves to the widget data.\n */\n fetch: () => Promise<T>;\n /**\n * A unique identifier for the widget.\n * dh.ui uses this to identify widgets within a dashboard or panel.\n */\n __dhId?: string;\n}\n\nexport interface WidgetPanelProps<T = unknown> extends WidgetComponentProps<T> {\n metadata?: dh.ide.VariableDescriptor;\n localDashboardId: string;\n glContainer: ItemContainer;\n glEventHub: EventEmitter;\n}\n\nexport interface WidgetPlugin<T = unknown> extends Plugin {\n type: typeof PluginType.WIDGET_PLUGIN;\n /**\n * The component that can render the widget types the plugin supports.\n *\n * If the widget should be opened as a panel by itself (determined by the UI),\n * then `panelComponent` will be used instead.\n * The component will be wrapped in a default panel if `panelComponent` is not provided.\n */\n component: React.ComponentType<WidgetComponentProps<T>>;\n\n /**\n * The server widget types that this plugin will handle.\n */\n supportedTypes: string | string[];\n\n /**\n * The title to display for widgets handled by the plugin.\n * This is a user friendly name to denote the type of widget.\n * Does not have to be unique across plugins.\n * If not specified, the plugin name will be used as the title.\n *\n * A plugin may have a name of `@deehaven/pandas` and a title of `Pandas`.\n * This way, the user will just see `Pandas panel` instead of `@deephaven/pandas panel`.\n */\n title?: string;\n\n /**\n * The component to use if the widget should be mounted as a panel.\n * If omitted, the default panel will be used.\n * This provides access to panel events such as onHide and onTabFocus.\n *\n * See @deephaven/dashboard-core-plugins WidgetPanel for the component that should be used here.\n */\n panelComponent?: React.ComponentType<WidgetPanelProps<T>>;\n\n /**\n * The icon to display next to the console button.\n * If a react node is provided (including a string), it will be rendered directly.\n * If no icon is specified, the default widget icon will be used.\n */\n icon?: IconDefinition | React.ReactElement<unknown>;\n}\n\nexport function isWidgetPlugin(plugin: PluginModule): plugin is WidgetPlugin {\n return 'type' in plugin && plugin.type === PluginType.WIDGET_PLUGIN;\n}\n\nexport interface TablePlugin extends Plugin {\n type: typeof PluginType.TABLE_PLUGIN;\n component: TablePluginComponent;\n}\n\nexport function isTablePlugin(plugin: PluginModule): plugin is TablePlugin {\n return 'type' in plugin && plugin.type === PluginType.TABLE_PLUGIN;\n}\n\n/**\n * Map from auth config keys to their values\n * E.g. Map { AuthHandlers → \"io.deephaven.auth.AnonymousAuthenticationHandler\" }\n */\nexport type AuthConfigMap = Map<string, string>;\n\n/**\n * Props for the auth plugin component to render\n */\nexport type AuthPluginProps = {\n /** Map from config keys to their values */\n authConfigValues: AuthConfigMap;\n\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\nexport type AuthPluginComponent = React.ComponentType<AuthPluginProps>;\n\nexport interface AuthPlugin extends Plugin {\n type: typeof PluginType.AUTH_PLUGIN;\n /**\n * The component to mount if the AuthPlugin is available\n */\n component: AuthPluginComponent;\n /**\n * Whether the auth plugin is available given the current configuration\n */\n isAvailable: (authHandlers: string[], authConfig: AuthConfigMap) => boolean;\n}\n\nexport function isAuthPlugin(plugin: PluginModule): plugin is AuthPlugin {\n return 'type' in plugin && plugin.type === PluginType.AUTH_PLUGIN;\n}\n\nexport interface ThemeConfig {\n name: string;\n baseTheme?: BaseThemeType;\n styleContent: string;\n}\n\nexport interface ThemePlugin extends Plugin {\n type: typeof PluginType.THEME_PLUGIN;\n themes: ThemeConfig | ThemeConfig[];\n}\n\n/** Type guard to check if given plugin is a `ThemePlugin` */\nexport function isThemePlugin(plugin: PluginModule): plugin is ThemePlugin {\n return 'type' in plugin && plugin.type === PluginType.THEME_PLUGIN;\n}\n\nexport type ElementName = string;\n\n/** A mapping of element names to their React components. */\nexport type ElementPluginMappingDefinition = Record<\n ElementName,\n React.ComponentType\n>;\n\nexport type ElementMap = ReadonlyMap<ElementName, React.ComponentType>;\n\n/** An element plugin is used by deephaven.ui to render custom components\n * The mapping contains the element names as keys and the React components as values.\n */\nexport interface ElementPlugin extends Plugin {\n type: typeof PluginType.ELEMENT_PLUGIN;\n mapping: ElementPluginMappingDefinition;\n}\n\nexport function isElementPlugin(plugin: PluginModule): plugin is ElementPlugin {\n return 'type' in plugin && plugin.type === PluginType.ELEMENT_PLUGIN;\n}\n\nexport function isPlugin(plugin: unknown): plugin is Plugin {\n return (\n isDashboardPlugin(plugin as PluginModule) ||\n isAuthPlugin(plugin as PluginModule) ||\n isTablePlugin(plugin as PluginModule) ||\n isThemePlugin(plugin as PluginModule) ||\n isWidgetPlugin(plugin as PluginModule) ||\n isElementPlugin(plugin as PluginModule)\n );\n}\n"],"mappings":"AASA,OAAO,IAAMA,UAAU,GAAGC,MAAM,CAACC,MAAM,CAAC;EACtCC,WAAW,EAAE,YAAY;EACzBC,gBAAgB,EAAE,iBAAiB;EACnCC,aAAa,EAAE,cAAc;EAC7BC,YAAY,EAAE,aAAa;EAC3BC,YAAY,EAAE,aAAa;EAC3BC,cAAc,EAAE;AAClB,CAAC,CAAC;;AAEF;AACA;AACA;;AAGA,OAAO,SAASC,uBAAuBA,CACrCC,MAAoB,EACa;EACjC,OAAO,iBAAiB,IAAIA,MAAM;AACpC;;AAEA;AACA;AACA;;AAQA,OAAO,SAASC,kBAAkBA,CAChCD,MAAoB,EACQ;EAC5B,OAAO,YAAY,IAAIA,MAAM;AAC/B;;AAIA;AACA;AACA;;AAKA,OAAO,SAASE,mBAAmBA,CACjCF,MAAoB,EACS;EAC7B,OAAO,aAAa,IAAIA,MAAM;AAChC;;AAEA;AACA;AACA;;AAMA,OAAO,SAASG,cAAcA,CAACH,MAAe,EAA0B;EACtE,OACED,uBAAuB,CAACC,MAAsB,CAAC,IAC/CC,kBAAkB,CAACD,MAAsB,CAAC,IAC1CE,mBAAmB,CAACF,MAAsB,CAAC;AAE/C;;AAkBA;AACA;AACA;;AAWA,OAAO,SAASI,iBAAiBA,CAC/BJ,MAAoB,EACO;EAC3B,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACI,gBAAgB;AACxE;AAkEA,OAAO,SAASY,cAAcA,CAACN,MAAoB,EAA0B;EAC3E,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACK,aAAa;AACrE;AAOA,OAAO,SAASY,aAAaA,CAACP,MAAoB,EAAyB;EACzE,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACM,YAAY;AACpE;;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAyBA,OAAO,SAASY,YAAYA,CAACR,MAAoB,EAAwB;EACvE,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACG,WAAW;AACnE;AAaA;AACA,OAAO,SAASgB,aAAaA,CAACT,MAAoB,EAAyB;EACzE,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACO,YAAY;AACpE;;AAIA;;AAQA;AACA;AACA;;AAMA,OAAO,SAASa,eAAeA,CAACV,MAAoB,EAA2B;EAC7E,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACQ,cAAc;AACtE;AAEA,OAAO,SAASa,QAAQA,CAACX,MAAe,EAAoB;EAC1D,OACEI,iBAAiB,CAACJ,MAAsB,CAAC,IACzCQ,YAAY,CAACR,MAAsB,CAAC,IACpCO,aAAa,CAACP,MAAsB,CAAC,IACrCS,aAAa,CAACT,MAAsB,CAAC,IACrCM,cAAc,CAACN,MAAsB,CAAC,IACtCU,eAAe,CAACV,MAAsB,CAAC;AAE3C","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PluginTypes.js","names":["PluginType","Object","freeze","AUTH_PLUGIN","DASHBOARD_PLUGIN","WIDGET_PLUGIN","TABLE_PLUGIN","THEME_PLUGIN","ELEMENT_PLUGIN","isLegacyDashboardPlugin","plugin","isLegacyAuthPlugin","isLegacyTablePlugin","isLegacyPlugin","isDashboardPlugin","type","isWidgetPlugin","isTablePlugin","isAuthPlugin","isThemePlugin","isElementPlugin","isPlugin"],"sources":["../src/PluginTypes.ts"],"sourcesContent":["import type { BaseThemeType } from '@deephaven/components';\nimport {\n type EventEmitter,\n type ItemContainer,\n} from '@deephaven/golden-layout';\nimport type { dh } from '@deephaven/jsapi-types';\nimport type { IconDefinition } from '@fortawesome/fontawesome-common-types';\nimport type { TablePluginComponent } from './TablePlugin';\n\nexport const PluginType = Object.freeze({\n AUTH_PLUGIN: 'AuthPlugin',\n DASHBOARD_PLUGIN: 'DashboardPlugin',\n WIDGET_PLUGIN: 'WidgetPlugin',\n TABLE_PLUGIN: 'TablePlugin',\n THEME_PLUGIN: 'ThemePlugin',\n ELEMENT_PLUGIN: 'ElementPlugin',\n});\n\n/**\n * @deprecated Use DashboardPlugin instead\n */\nexport type LegacyDashboardPlugin = { DashboardPlugin: React.ComponentType };\n\nexport function isLegacyDashboardPlugin(\n plugin: PluginModule\n): plugin is LegacyDashboardPlugin {\n return 'DashboardPlugin' in plugin;\n}\n\n/**\n * @deprecated Use AuthPlugin instead\n */\nexport type LegacyAuthPlugin = {\n AuthPlugin: {\n Component: React.ComponentType<AuthPluginProps>;\n isAvailable: (authHandlers: string[], authConfig: AuthConfigMap) => boolean;\n };\n};\n\nexport function isLegacyAuthPlugin(\n plugin: PluginModule\n): plugin is LegacyAuthPlugin {\n return 'AuthPlugin' in plugin;\n}\n\nexport type PluginModuleMap = Map<string, VersionedPluginModule>;\n\n/**\n * @deprecated Use TablePlugin instead\n */\nexport type LegacyTablePlugin = {\n TablePlugin: TablePluginComponent;\n};\n\nexport function isLegacyTablePlugin(\n plugin: PluginModule\n): plugin is LegacyTablePlugin {\n return 'TablePlugin' in plugin;\n}\n\n/**\n * @deprecated Use Plugin instead\n */\nexport type LegacyPlugin =\n | LegacyDashboardPlugin\n | LegacyAuthPlugin\n | LegacyTablePlugin;\n\nexport function isLegacyPlugin(plugin: unknown): plugin is LegacyPlugin {\n return (\n isLegacyDashboardPlugin(plugin as PluginModule) ||\n isLegacyAuthPlugin(plugin as PluginModule) ||\n isLegacyTablePlugin(plugin as PluginModule)\n );\n}\n\nexport type PluginModule = Plugin | LegacyPlugin;\n\nexport type VersionedPluginModule = PluginModule & { version?: string };\n\nexport interface Plugin {\n /**\n * The name of the plugin. This will be used as an identifier for the plugin and should be unique.\n */\n name: string;\n\n /**\n * The type of plugin.\n */\n type: (typeof PluginType)[keyof typeof PluginType];\n}\n\n/**\n * A plugin that will be mounted to the dashboard.\n */\nexport interface DashboardPlugin extends Plugin {\n type: typeof PluginType.DASHBOARD_PLUGIN;\n /**\n * The component to mount for the dashboard plugin.\n * This component is used to initialize the plugin and will only be mounted to the dashboard once.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: React.ComponentType<any>;\n}\n\nexport function isDashboardPlugin(\n plugin: PluginModule\n): plugin is DashboardPlugin {\n return 'type' in plugin && plugin.type === PluginType.DASHBOARD_PLUGIN;\n}\n\nexport interface WidgetComponentProps<T = unknown> {\n /**\n * Function to fetch the widget data.\n * @returns A promise that resolves to the widget data.\n */\n fetch: () => Promise<T>;\n /**\n * A unique identifier for the widget.\n * dh.ui uses this to identify widgets within a dashboard or panel.\n */\n __dhId?: string;\n}\n\nexport interface WidgetPanelProps<T = unknown> extends WidgetComponentProps<T> {\n metadata?: dh.ide.VariableDescriptor;\n localDashboardId: string;\n glContainer: ItemContainer;\n glEventHub: EventEmitter;\n}\n\nexport interface WidgetPlugin<T = unknown> extends Plugin {\n type: typeof PluginType.WIDGET_PLUGIN;\n /**\n * The component that can render the widget types the plugin supports.\n *\n * If the widget should be opened as a panel by itself (determined by the UI),\n * then `panelComponent` will be used instead.\n * The component will be wrapped in a default panel if `panelComponent` is not provided.\n */\n component: React.ComponentType<WidgetComponentProps<T>>;\n\n /**\n * The server widget types that this plugin will handle.\n */\n supportedTypes: string | string[];\n\n /**\n * The title to display for widgets handled by the plugin.\n * This is a user friendly name to denote the type of widget.\n * Does not have to be unique across plugins.\n * If not specified, the plugin name will be used as the title.\n *\n * A plugin may have a name of `@deehaven/pandas` and a title of `Pandas`.\n * This way, the user will just see `Pandas panel` instead of `@deephaven/pandas panel`.\n */\n title?: string;\n\n /**\n * The component to use if the widget should be mounted as a panel.\n * If omitted, the default panel will be used.\n * This provides access to panel events such as onHide and onTabFocus.\n *\n * See @deephaven/dashboard-core-plugins WidgetPanel for the component that should be used here.\n */\n panelComponent?: React.ComponentType<WidgetPanelProps<T>>;\n\n /**\n * The icon to display next to the console button.\n * If a react node is provided (including a string), it will be rendered directly.\n * If no icon is specified, the default widget icon will be used.\n */\n icon?: IconDefinition | React.ReactElement<unknown>;\n}\n\nexport function isWidgetPlugin(plugin: PluginModule): plugin is WidgetPlugin {\n return 'type' in plugin && plugin.type === PluginType.WIDGET_PLUGIN;\n}\n\nexport interface TablePlugin extends Plugin {\n type: typeof PluginType.TABLE_PLUGIN;\n component: TablePluginComponent;\n}\n\nexport function isTablePlugin(plugin: PluginModule): plugin is TablePlugin {\n return 'type' in plugin && plugin.type === PluginType.TABLE_PLUGIN;\n}\n\n/**\n * Map from auth config keys to their values\n * E.g. Map { AuthHandlers → \"io.deephaven.auth.AnonymousAuthenticationHandler\" }\n */\nexport type AuthConfigMap = Map<string, string>;\n\n/**\n * Props for the auth plugin component to render\n */\nexport type AuthPluginProps = {\n /** Map from config keys to their values */\n authConfigValues: AuthConfigMap;\n\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\nexport type AuthPluginComponent = React.ComponentType<AuthPluginProps>;\n\nexport interface AuthPlugin extends Plugin {\n type: typeof PluginType.AUTH_PLUGIN;\n /**\n * The component to mount if the AuthPlugin is available\n */\n component: AuthPluginComponent;\n /**\n * Whether the auth plugin is available given the current configuration\n */\n isAvailable: (authHandlers: string[], authConfig: AuthConfigMap) => boolean;\n}\n\nexport function isAuthPlugin(plugin: PluginModule): plugin is AuthPlugin {\n return 'type' in plugin && plugin.type === PluginType.AUTH_PLUGIN;\n}\n\nexport interface ThemeConfig {\n name: string;\n baseTheme?: BaseThemeType;\n styleContent: string;\n}\n\nexport interface ThemePlugin extends Plugin {\n type: typeof PluginType.THEME_PLUGIN;\n themes: ThemeConfig | ThemeConfig[];\n}\n\n/** Type guard to check if given plugin is a `ThemePlugin` */\nexport function isThemePlugin(plugin: PluginModule): plugin is ThemePlugin {\n return 'type' in plugin && plugin.type === PluginType.THEME_PLUGIN;\n}\n\nexport type ElementName = string;\n\n/** A mapping of element names to their React components. */\nexport type ElementPluginMappingDefinition<\n P extends Record<ElementName, unknown> = Record<string, never>,\n> = {\n [K in keyof P]: React.ComponentType<P[K]>;\n};\n\nexport type ElementMap<\n P extends Record<string, unknown> = Record<string, never>,\n> = ReadonlyMap<\n keyof P extends never ? string : keyof P,\n React.ComponentType<P[keyof P]>\n>;\n\n/** An element plugin is used by deephaven.ui to render custom components\n * The mapping contains the element names as keys and the React components as values.\n */\nexport interface ElementPlugin extends Plugin {\n type: typeof PluginType.ELEMENT_PLUGIN;\n mapping: ElementPluginMappingDefinition;\n}\n\nexport function isElementPlugin(plugin: PluginModule): plugin is ElementPlugin {\n return 'type' in plugin && plugin.type === PluginType.ELEMENT_PLUGIN;\n}\n\nexport function isPlugin(plugin: unknown): plugin is Plugin {\n return (\n isDashboardPlugin(plugin as PluginModule) ||\n isAuthPlugin(plugin as PluginModule) ||\n isTablePlugin(plugin as PluginModule) ||\n isThemePlugin(plugin as PluginModule) ||\n isWidgetPlugin(plugin as PluginModule) ||\n isElementPlugin(plugin as PluginModule)\n );\n}\n"],"mappings":"AASA,OAAO,IAAMA,UAAU,GAAGC,MAAM,CAACC,MAAM,CAAC;EACtCC,WAAW,EAAE,YAAY;EACzBC,gBAAgB,EAAE,iBAAiB;EACnCC,aAAa,EAAE,cAAc;EAC7BC,YAAY,EAAE,aAAa;EAC3BC,YAAY,EAAE,aAAa;EAC3BC,cAAc,EAAE;AAClB,CAAC,CAAC;;AAEF;AACA;AACA;;AAGA,OAAO,SAASC,uBAAuBA,CACrCC,MAAoB,EACa;EACjC,OAAO,iBAAiB,IAAIA,MAAM;AACpC;;AAEA;AACA;AACA;;AAQA,OAAO,SAASC,kBAAkBA,CAChCD,MAAoB,EACQ;EAC5B,OAAO,YAAY,IAAIA,MAAM;AAC/B;;AAIA;AACA;AACA;;AAKA,OAAO,SAASE,mBAAmBA,CACjCF,MAAoB,EACS;EAC7B,OAAO,aAAa,IAAIA,MAAM;AAChC;;AAEA;AACA;AACA;;AAMA,OAAO,SAASG,cAAcA,CAACH,MAAe,EAA0B;EACtE,OACED,uBAAuB,CAACC,MAAsB,CAAC,IAC/CC,kBAAkB,CAACD,MAAsB,CAAC,IAC1CE,mBAAmB,CAACF,MAAsB,CAAC;AAE/C;;AAkBA;AACA;AACA;;AAWA,OAAO,SAASI,iBAAiBA,CAC/BJ,MAAoB,EACO;EAC3B,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACI,gBAAgB;AACxE;AAkEA,OAAO,SAASY,cAAcA,CAACN,MAAoB,EAA0B;EAC3E,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACK,aAAa;AACrE;AAOA,OAAO,SAASY,aAAaA,CAACP,MAAoB,EAAyB;EACzE,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACM,YAAY;AACpE;;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAyBA,OAAO,SAASY,YAAYA,CAACR,MAAoB,EAAwB;EACvE,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACG,WAAW;AACnE;AAaA;AACA,OAAO,SAASgB,aAAaA,CAACT,MAAoB,EAAyB;EACzE,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACO,YAAY;AACpE;;AAIA;;AAcA;AACA;AACA;;AAMA,OAAO,SAASa,eAAeA,CAACV,MAAoB,EAA2B;EAC7E,OAAO,MAAM,IAAIA,MAAM,IAAIA,MAAM,CAACK,IAAI,KAAKf,UAAU,CAACQ,cAAc;AACtE;AAEA,OAAO,SAASa,QAAQA,CAACX,MAAe,EAAoB;EAC1D,OACEI,iBAAiB,CAACJ,MAAsB,CAAC,IACzCQ,YAAY,CAACR,MAAsB,CAAC,IACpCO,aAAa,CAACP,MAAsB,CAAC,IACrCS,aAAa,CAACT,MAAsB,CAAC,IACrCM,cAAc,CAACN,MAAsB,CAAC,IACtCU,eAAe,CAACV,MAAsB,CAAC;AAE3C","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/plugin",
|
|
3
|
-
"version": "1.2.1-beta.
|
|
3
|
+
"version": "1.2.1-beta.1+8c8edd5d",
|
|
4
4
|
"description": "Deephaven JS Plugin Core",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
"build:babel": "babel ./src --out-dir ./dist --extensions \".ts,.tsx,.js,.jsx\" --source-maps --root-mode upward"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@deephaven/components": "^1.2.1-beta.
|
|
26
|
-
"@deephaven/golden-layout": "^1.2.1-beta.
|
|
27
|
-
"@deephaven/grid": "^1.2.1-beta.
|
|
28
|
-
"@deephaven/icons": "^1.2.1-beta.
|
|
29
|
-
"@deephaven/iris-grid": "^1.2.1-beta.
|
|
25
|
+
"@deephaven/components": "^1.2.1-beta.1+8c8edd5d",
|
|
26
|
+
"@deephaven/golden-layout": "^1.2.1-beta.1+8c8edd5d",
|
|
27
|
+
"@deephaven/grid": "^1.2.1-beta.1+8c8edd5d",
|
|
28
|
+
"@deephaven/icons": "^1.2.1-beta.1+8c8edd5d",
|
|
29
|
+
"@deephaven/iris-grid": "^1.2.1-beta.1+8c8edd5d",
|
|
30
30
|
"@deephaven/jsapi-types": "^1.0.0-dev0.39.4",
|
|
31
|
-
"@deephaven/log": "^1.2.1-beta.
|
|
32
|
-
"@deephaven/react-hooks": "^1.2.1-beta.
|
|
31
|
+
"@deephaven/log": "^1.2.1-beta.1+8c8edd5d",
|
|
32
|
+
"@deephaven/react-hooks": "^1.2.1-beta.1+8c8edd5d",
|
|
33
33
|
"@fortawesome/fontawesome-common-types": "^6.1.1",
|
|
34
34
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
35
35
|
"nanoid": "^5.0.7"
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "8c8edd5ddca3bd94443180fb9a1b5dba4dbcce3b"
|
|
47
47
|
}
|