@dxos/plugin-kanban 0.9.0 → 0.9.1-staging.ee54ba693a
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/PLUGIN.mdl +3 -3
- package/dist/lib/neutral/{KanbanArticle-T4CPKAZH.mjs → KanbanArticle-JQMQQHRB.mjs} +1 -1
- package/dist/lib/neutral/{KanbanArticle-T4CPKAZH.mjs.map → KanbanArticle-JQMQQHRB.mjs.map} +2 -2
- package/dist/lib/neutral/KanbanPlugin.mjs +6 -6
- package/dist/lib/neutral/KanbanPlugin.mjs.map +4 -4
- package/dist/lib/neutral/KanbanPlugin.node.mjs +3 -3
- package/dist/lib/neutral/KanbanPlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/{KanbanSettings-5WOS4CUE.mjs → KanbanProperties-W7MZNZVJ.mjs} +6 -6
- package/dist/lib/neutral/KanbanProperties-W7MZNZVJ.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +5 -5
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/{chunk-DAKIZO46.mjs → chunk-7TVVF45P.mjs} +7 -6
- package/dist/lib/neutral/chunk-7TVVF45P.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7YLGUKDJ.mjs +8 -0
- package/dist/lib/neutral/chunk-CFPH5R6P.mjs +26 -0
- package/dist/lib/neutral/chunk-CFPH5R6P.mjs.map +7 -0
- package/dist/lib/neutral/chunk-V4AVOJVU.mjs +50 -0
- package/dist/lib/neutral/chunk-V4AVOJVU.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +9 -7
- package/dist/lib/neutral/components/index.mjs.map +3 -3
- package/dist/lib/neutral/containers/index.mjs +3 -3
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-object-DKBSI46K.mjs → create-object-DIIFRS57.mjs} +14 -9
- package/dist/lib/neutral/create-object-DIIFRS57.mjs.map +7 -0
- package/dist/lib/neutral/{delete-card-VNAV3CZV.mjs → delete-card-TK2G6YHX.mjs} +2 -2
- package/dist/lib/neutral/{delete-card-field-XHOLGS6L.mjs → delete-card-field-LGWPBOUW.mjs} +2 -2
- package/dist/lib/neutral/index.mjs +6 -6
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +2 -2
- package/dist/lib/neutral/{react-surface-VZEVEJL5.mjs → react-surface-FQGXRR3X.mjs} +11 -13
- package/dist/lib/neutral/react-surface-FQGXRR3X.mjs.map +7 -0
- package/dist/lib/neutral/{restore-card-EKVEPATL.mjs → restore-card-3O6PVN7J.mjs} +2 -2
- package/dist/lib/neutral/{restore-card-field-TQCTGGNO.mjs → restore-card-field-5G4DVYYY.mjs} +2 -2
- package/dist/lib/neutral/skill-definition-YGTCKXGP.mjs +15 -0
- package/dist/lib/neutral/skill-definition-YGTCKXGP.mjs.map +7 -0
- package/dist/lib/neutral/skills/index.mjs +8 -0
- package/dist/lib/neutral/testing/index.mjs +7 -5
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- package/dist/lib/neutral/translations.mjs +1 -1
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +1 -1
- package/dist/lib/neutral/{undo-mappings-6CHW6BOF.mjs → undo-mappings-EZTHO4UL.mjs} +3 -3
- package/dist/lib/neutral/{undo-mappings-6CHW6BOF.mjs.map → undo-mappings-EZTHO4UL.mjs.map} +3 -3
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/capabilities/artifact-definition.d.ts +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -7
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +4 -10
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
- package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/undo-mappings.d.ts +2 -2
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
- package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts.map +1 -1
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.d.ts.map +1 -1
- package/dist/types/src/containers/{KanbanSettings/KanbanSettings.d.ts → KanbanProperties/KanbanProperties.d.ts} +4 -4
- package/dist/types/src/containers/KanbanProperties/KanbanProperties.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanProperties/index.d.ts +2 -0
- package/dist/types/src/containers/KanbanProperties/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +1 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +32 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/skills/index.d.ts +2 -0
- package/dist/types/src/skills/index.d.ts.map +1 -0
- package/dist/types/src/skills/kanban-skill.d.ts +4 -0
- package/dist/types/src/skills/kanban-skill.d.ts.map +1 -0
- package/dist/types/src/testing/KanbanCardTileSimple.d.ts.map +1 -1
- package/dist/types/src/types/Kanban.d.ts +3 -6
- package/dist/types/src/types/Kanban.d.ts.map +1 -1
- package/dist/types/src/types/KanbanOperation.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +36 -0
- package/package.json +48 -47
- package/src/KanbanPlugin.node.ts +2 -2
- package/src/KanbanPlugin.test.ts +3 -3
- package/src/KanbanPlugin.tsx +3 -3
- package/src/capabilities/create-object.ts +9 -7
- package/src/capabilities/index.ts +1 -7
- package/src/capabilities/react-surface.tsx +17 -27
- package/src/capabilities/skill-definition.ts +14 -0
- package/src/capabilities/undo-mappings.ts +2 -2
- package/src/components/KanbanBoard/KanbanBoard.tsx +1 -1
- package/src/components/KanbanBoard/KanbanCard.tsx +14 -12
- package/src/containers/KanbanArticle/KanbanArticle.stories.tsx +1 -1
- package/src/containers/KanbanArticle/KanbanArticle.tsx +1 -1
- package/src/containers/{KanbanSettings/KanbanSettings.tsx → KanbanProperties/KanbanProperties.tsx} +13 -6
- package/src/containers/KanbanProperties/index.ts +5 -0
- package/src/containers/index.ts +1 -1
- package/src/hooks/useKanbanBoardModel.browser.test.ts +20 -18
- package/src/index.ts +1 -1
- package/src/meta.ts +2 -29
- package/src/skills/index.ts +5 -0
- package/src/{blueprints/kanban-blueprint.ts → skills/kanban-skill.ts} +8 -8
- package/src/testing/KanbanCardTileSimple.tsx +13 -11
- package/src/translations.ts +1 -1
- package/src/types/Kanban.ts +13 -17
- package/src/types/KanbanOperation.ts +2 -2
- package/src/types/schema.ts +1 -1
- package/dist/lib/neutral/KanbanSettings-5WOS4CUE.mjs.map +0 -7
- package/dist/lib/neutral/blueprint-definition-6DV3Q5MC.mjs +0 -15
- package/dist/lib/neutral/blueprint-definition-6DV3Q5MC.mjs.map +0 -7
- package/dist/lib/neutral/blueprints/index.mjs +0 -8
- package/dist/lib/neutral/chunk-6ZHHQWO5.mjs +0 -39
- package/dist/lib/neutral/chunk-6ZHHQWO5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DAKIZO46.mjs.map +0 -7
- package/dist/lib/neutral/chunk-M5ISZWZU.mjs +0 -8
- package/dist/lib/neutral/chunk-ZTQW5KQS.mjs +0 -26
- package/dist/lib/neutral/chunk-ZTQW5KQS.mjs.map +0 -7
- package/dist/lib/neutral/create-object-DKBSI46K.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-VZEVEJL5.mjs.map +0 -7
- package/dist/types/src/blueprints/index.d.ts +0 -2
- package/dist/types/src/blueprints/index.d.ts.map +0 -1
- package/dist/types/src/blueprints/kanban-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/kanban-blueprint.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/containers/KanbanSettings/KanbanSettings.d.ts.map +0 -1
- package/dist/types/src/containers/KanbanSettings/index.d.ts +0 -2
- package/dist/types/src/containers/KanbanSettings/index.d.ts.map +0 -1
- package/src/blueprints/index.ts +0 -5
- package/src/capabilities/blueprint-definition.ts +0 -19
- package/src/containers/KanbanSettings/index.ts +0 -5
- /package/dist/lib/neutral/{chunk-M5ISZWZU.mjs.map → chunk-7YLGUKDJ.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-card-VNAV3CZV.mjs.map → delete-card-TK2G6YHX.mjs.map} +0 -0
- /package/dist/lib/neutral/{delete-card-field-XHOLGS6L.mjs.map → delete-card-field-LGWPBOUW.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-card-EKVEPATL.mjs.map → restore-card-3O6PVN7J.mjs.map} +0 -0
- /package/dist/lib/neutral/{restore-card-field-TQCTGGNO.mjs.map → restore-card-field-5G4DVYYY.mjs.map} +0 -0
- /package/dist/lib/neutral/{blueprints → skills}/index.mjs.map +0 -0
|
@@ -38,13 +38,13 @@ import React, { forwardRef, useCallback, useMemo, useState } from "react";
|
|
|
38
38
|
import { Surface } from "@dxos/app-framework/ui";
|
|
39
39
|
import { AppSurface, useObjectMenuItems } from "@dxos/app-toolkit/ui";
|
|
40
40
|
import { Obj } from "@dxos/echo";
|
|
41
|
-
import { Card,
|
|
41
|
+
import { Card, IconButton, useTranslation } from "@dxos/react-ui";
|
|
42
42
|
import { Menu, createMenuAction } from "@dxos/react-ui-menu";
|
|
43
43
|
import { Focus, Mosaic, useBoard } from "@dxos/react-ui-mosaic";
|
|
44
44
|
import { meta } from "#meta";
|
|
45
45
|
var KANBAN_CARD_TILE_NAME = "KanbanBoard.Card";
|
|
46
46
|
var KanbanCard = /* @__PURE__ */ forwardRef(({ data, location, debug, draggable }, forwardedRef) => {
|
|
47
|
-
const { t } = useTranslation(meta.
|
|
47
|
+
const { t } = useTranslation(meta.profile.key);
|
|
48
48
|
const { model } = useBoard(KANBAN_CARD_TILE_NAME);
|
|
49
49
|
const { projection, columnFieldPath, onCardRemove } = useKanbanBoard(KANBAN_CARD_TILE_NAME);
|
|
50
50
|
const [dragHandle, setDragHandle] = useState(null);
|
|
@@ -82,18 +82,20 @@ var KanbanCard = /* @__PURE__ */ forwardRef(({ data, location, debug, draggable
|
|
|
82
82
|
testId: "mosaicBoard.cardDragHandle"
|
|
83
83
|
}), /* @__PURE__ */ React.createElement(Card.Title, {
|
|
84
84
|
"data-testid": "mosaicBoard.cardTitle"
|
|
85
|
-
}, Obj.getLabel(data)), /* @__PURE__ */ React.createElement(
|
|
85
|
+
}, Obj.getLabel(data)), /* @__PURE__ */ React.createElement(Card.Block, {
|
|
86
|
+
end: true
|
|
87
|
+
}, /* @__PURE__ */ React.createElement(Menu.Trigger, {
|
|
86
88
|
asChild: true,
|
|
87
89
|
disabled: !menuItems?.length
|
|
88
|
-
}, /* @__PURE__ */ React.createElement(
|
|
90
|
+
}, /* @__PURE__ */ React.createElement(IconButton, {
|
|
89
91
|
iconOnly: true,
|
|
90
92
|
variant: "ghost",
|
|
91
93
|
icon: "ph--dots-three-vertical--regular",
|
|
92
94
|
label: t("action-menu.label")
|
|
93
95
|
})), /* @__PURE__ */ React.createElement(Menu.Content, {
|
|
94
96
|
items: menuItems
|
|
95
|
-
})), /* @__PURE__ */ React.createElement(Card.Body, null, projection && /* @__PURE__ */ React.createElement(Surface.Surface, {
|
|
96
|
-
type: AppSurface.
|
|
97
|
+
}))), /* @__PURE__ */ React.createElement(Card.Body, null, projection && /* @__PURE__ */ React.createElement(Surface.Surface, {
|
|
98
|
+
type: AppSurface.CardContent,
|
|
97
99
|
limit: 1,
|
|
98
100
|
data: {
|
|
99
101
|
subject: data,
|
|
@@ -156,7 +158,7 @@ KanbanColumn.displayName = KANBAN_COLUMN_NAME;
|
|
|
156
158
|
var KANBAN_BOARD_ROOT = "KanbanBoard.Root";
|
|
157
159
|
var KanbanBoardRoot = ({ children, kanban, projection, items, change, itemTile = KanbanCard, onCardAdd, onCardRemove }) => {
|
|
158
160
|
const registry = useContext(RegistryContext);
|
|
159
|
-
const { t } = useTranslation2(meta2.
|
|
161
|
+
const { t } = useTranslation2(meta2.profile.key);
|
|
160
162
|
const model = useKanbanBoardModel(kanban, projection, items, registry);
|
|
161
163
|
const columns = model?.getColumns?.() ?? [];
|
|
162
164
|
const view = kanban?.spec.kind === "view" ? kanban.spec.view.target : void 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/KanbanBoard/KanbanBoard.tsx", "../../../../src/components/KanbanBoard/context.ts", "../../../../src/components/KanbanBoard/KanbanCard.tsx", "../../../../src/components/KanbanBoard/KanbanColumn.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { type ComponentPropsWithoutRef, type PropsWithChildren, useCallback, useContext, useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { Board, useBoard } from '@dxos/react-ui-mosaic';\nimport type { ProjectionModel } from '@dxos/schema';\n\nimport { useKanbanBoardModel, useKanbanColumnEventHandler } from '#hooks';\nimport { meta } from '#meta';\nimport { type Kanban, UNCATEGORIZED_ATTRIBUTES, UNCATEGORIZED_VALUE } from '#types';\n\nimport {\n KanbanBoardContext,\n type KanbanBoardContextValue,\n type KanbanCardProps,\n type KanbanColumnProps,\n useKanbanBoard,\n} from './context';\nimport { KanbanCard } from './KanbanCard';\nimport { KanbanColumn } from './KanbanColumn';\n\n// TODO(burdon): Rename Kanban.\n\n//\n// Root\n//\n\nconst KANBAN_BOARD_ROOT = 'KanbanBoard.Root';\n\ntype KanbanBoardRootProps = PropsWithChildren<\n {\n kanban: Kanban.Kanban;\n /** Required when providing context; Root derives columnFieldPath, pivotFieldId, getPivotAttributes from kanban + projection. */\n projection: ProjectionModel;\n /** Atom of items (e.g. from AtomQuery for DB, or Atom.make([]) for in-memory). */\n items: Atom.Atom<Obj.Unknown[]>;\n onCardAdd?: (columnValue: string | undefined) => string | undefined;\n onCardRemove?: (card: Obj.Unknown) => void;\n } & Pick<KanbanBoardContextValue, 'change' | 'itemTile'> &\n ComponentPropsWithoutRef<'div'>\n>;\n\nexport const KanbanBoardRoot = ({\n children,\n kanban,\n projection,\n items,\n change,\n itemTile = KanbanCard,\n onCardAdd,\n onCardRemove,\n}: KanbanBoardRootProps) => {\n const registry = useContext(RegistryContext);\n const { t } = useTranslation(meta.id);\n const model = useKanbanBoardModel(kanban, projection, items, registry);\n const columns = model?.getColumns?.() ?? [];\n const view = kanban?.spec.kind === 'view' ? kanban.spec.view.target : undefined;\n const pivotFieldId = view?.projection?.pivotFieldId;\n const columnFieldPath = useMemo(() => {\n // Items-variant kanbans use the property name itself as the pivot field\n // (no view/projection translation layer).\n if (kanban?.spec.kind === 'items') {\n return kanban.spec.pivotField;\n }\n if (pivotFieldId === undefined || !projection) {\n return undefined;\n }\n\n return projection.tryGetFieldProjection(pivotFieldId)?.props.property;\n }, [kanban?.spec, projection, pivotFieldId]);\n\n const getPivotAttributes = useCallback<KanbanBoardContextValue['getPivotAttributes']>(\n (columnValue) => {\n if (columnValue === UNCATEGORIZED_VALUE) {\n return UNCATEGORIZED_ATTRIBUTES;\n }\n\n const options = projection?.tryGetFieldProjection(pivotFieldId ?? '')?.props.options ?? [];\n const option = options.find((option) => option.id === columnValue);\n return option ?? ({ title: columnValue, color: 'neutral' } as const);\n },\n [projection, pivotFieldId],\n );\n\n if (columns.length === 0) {\n return (\n <div className='flex flex-1 items-center justify-center p-8 text-center text-description'>\n {t('select-pivot.placeholder')}\n </div>\n );\n }\n\n return (\n <KanbanBoardContext\n kanbanId={Obj.getURI(kanban)}\n projection={projection}\n columnFieldPath={columnFieldPath}\n pivotFieldId={pivotFieldId}\n getPivotAttributes={getPivotAttributes}\n itemTile={itemTile}\n change={change}\n onCardAdd={onCardAdd}\n onCardRemove={onCardRemove}\n >\n <Board.Root model={model}>{children}</Board.Root>\n </KanbanBoardContext>\n );\n};\n\nKanbanBoardRoot.displayName = KANBAN_BOARD_ROOT;\n\n//\n// KanbanBoardContent\n//\n\nconst KANBAN_BOARD_CONTENT = 'KanbanBoard.Content';\n\ntype KanbanBoardContentProps = {};\n\nexport const KanbanBoardContent = composable<HTMLDivElement, KanbanBoardContentProps>((props, forwardedRef) => {\n const { model } = useBoard(KANBAN_BOARD_CONTENT);\n const { kanbanId, projection, pivotFieldId, change } = useKanbanBoard(KANBAN_BOARD_CONTENT);\n\n const columnEventHandler = useKanbanColumnEventHandler({\n id: `${kanbanId}-columns`,\n model,\n projection: projection ?? undefined,\n pivotFieldId: pivotFieldId ?? undefined,\n change,\n });\n\n return (\n <Board.Content\n {...composableProps(props)}\n ref={forwardedRef}\n id={kanbanId}\n eventHandler={columnEventHandler}\n Tile={KanbanColumn}\n />\n );\n});\n\nKanbanBoardContent.displayName = KANBAN_BOARD_CONTENT;\n\n//\n// KanbanBoard\n//\n\nexport const KanbanBoard = {\n Root: KanbanBoardRoot,\n Content: KanbanBoardContent,\n Column: KanbanColumn,\n Card: KanbanCard,\n};\n\nexport { useKanbanBoard };\n\nexport type { KanbanBoardRootProps as KanbanBoardProps, KanbanCardProps, KanbanColumnProps };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport { type ComponentType } from 'react';\n\nimport { type Obj } from '@dxos/echo';\nimport { type MosaicTileProps } from '@dxos/react-ui-mosaic';\nimport { type ProjectionModel } from '@dxos/schema';\n\nimport { type ColumnStructure, type KanbanChangeCallback, UNCATEGORIZED_ATTRIBUTES, UNCATEGORIZED_VALUE } from '#types';\n\nconst KANBAN_BOARD_NAME = 'KanbanBoard.Context';\n\n/**\n * Card tile props. Defined here (rather than in `KanbanCard.tsx`) so the\n * context type can reference it without forming a cycle through that\n * module's runtime exports — webkit treats the resulting TDZ as a hard\n * error while other engines are lenient.\n */\nexport type KanbanCardProps = Pick<MosaicTileProps<Obj.Unknown>, 'location' | 'data' | 'debug' | 'draggable'>;\n\n/**\n * Column tile props. See note on {@link KanbanCardProps}.\n */\nexport type KanbanColumnProps = Pick<MosaicTileProps<ColumnStructure>, 'location' | 'data' | 'debug' | 'draggable'>;\n\n/**\n * Context value for the Kanban board.\n * Items are Echo objects (Obj.Unknown).\n */\nexport type KanbanBoardContextValue = {\n kanbanId: string;\n projection: ProjectionModel | undefined;\n columnFieldPath: string | undefined;\n change: KanbanChangeCallback<Obj.Unknown>;\n pivotFieldId: string | undefined;\n getPivotAttributes: (columnValue: string) => { title: string; color: string };\n itemTile?: ComponentType<KanbanCardProps>; // TODO(burdon): Prop.\n onCardAdd?: (columnValue: string | undefined) => string | undefined;\n onCardRemove?: (card: Obj.Unknown) => void;\n};\n\nexport const [KanbanBoardContext, useKanbanBoard] = createContext<KanbanBoardContextValue>(KANBAN_BOARD_NAME, {\n kanbanId: 'never',\n projection: undefined,\n columnFieldPath: undefined,\n change: { kanban: () => {}, setItemField: () => {} },\n pivotFieldId: undefined,\n getPivotAttributes: (id: string) =>\n id === UNCATEGORIZED_VALUE ? UNCATEGORIZED_ATTRIBUTES : { title: id, color: 'neutral' },\n itemTile: (() => null) as ComponentType<KanbanCardProps>,\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Menu, createMenuAction } from '@dxos/react-ui-menu';\nimport { Focus, Mosaic, useBoard } from '@dxos/react-ui-mosaic';\n\nimport { meta } from '#meta';\n\nimport { type KanbanCardProps, useKanbanBoard } from './context';\n\nexport { type KanbanCardProps };\n\nconst KANBAN_CARD_TILE_NAME = 'KanbanBoard.Card';\n\n/**\n * Mosaic Tile for Kanban card.\n * Uses Surface for content; requires plugin manager context.\n */\nexport const KanbanCard = forwardRef<HTMLDivElement, KanbanCardProps>(\n ({ data, location, debug, draggable }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { model } = useBoard(KANBAN_CARD_TILE_NAME);\n const { projection, columnFieldPath, onCardRemove } = useKanbanBoard(KANBAN_CARD_TILE_NAME);\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n const dragHandleRef = useCallback((el: HTMLButtonElement | null) => setDragHandle(el), []);\n\n const objectMenuItems = useObjectMenuItems(data);\n\n const menuItems = useMemo(\n () => [\n ...objectMenuItems,\n ...(onCardRemove\n ? [\n createMenuAction('remove', () => onCardRemove(data), {\n label: t('remove-card.label'),\n icon: 'ph--trash--regular',\n }),\n ]\n : []),\n ],\n [objectMenuItems, onCardRemove, data, t],\n );\n\n return (\n <Menu.Root>\n <Mosaic.Tile\n asChild\n id={model.getItemId(data)}\n data={data}\n location={location}\n debug={debug}\n draggable={draggable}\n dragHandle={dragHandle}\n >\n <Focus.Item asChild>\n <Card.Root ref={forwardedRef} data-testid='board-item'>\n <Card.Header>\n <Card.DragHandle ref={dragHandleRef} testId='mosaicBoard.cardDragHandle' />\n <Card.Title data-testid='mosaicBoard.cardTitle'>{Obj.getLabel(data)}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Menu.Trigger asChild disabled={!menuItems?.length}>\n <Toolbar.IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('action-menu.label')}\n />\n </Menu.Trigger>\n <Menu.Content items={menuItems} />\n </Card.Header>\n <Card.Body>\n {projection && (\n <Surface.Surface\n type={AppSurface.Card}\n limit={1}\n data={{\n subject: data,\n projection,\n // Hide the pivot field: its value is already conveyed by\n // which column the card sits in.\n ignorePaths: columnFieldPath ? [columnFieldPath] : undefined,\n }}\n />\n )}\n </Card.Body>\n </Card.Root>\n </Focus.Item>\n </Mosaic.Tile>\n </Menu.Root>\n );\n },\n);\n\nKanbanCard.displayName = KANBAN_CARD_TILE_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { FC, forwardRef, useState } from 'react';\n\nimport type { Obj } from '@dxos/echo';\nimport { Board, type MosaicTileProps, useBoard } from '@dxos/react-ui-mosaic';\n\nimport { useKanbanItemEventHandler } from '#hooks';\nimport { type ColumnStructure, UNCATEGORIZED_VALUE } from '#types';\n\nimport { type KanbanColumnProps, useKanbanBoard } from './context';\n\nexport { type KanbanColumnProps };\n\nconst KANBAN_COLUMN_NAME = 'KanbanBoard.Column';\n\n/**\n * Mosaic Tile for Kanban column.\n */\nexport const KanbanColumn = forwardRef<HTMLDivElement, KanbanColumnProps>(\n ({ data: column, location, debug, draggable }, forwardedRef) => {\n const { model } = useBoard<ColumnStructure, Obj.Unknown>(KANBAN_COLUMN_NAME);\n const { columnFieldPath, change, onCardAdd, getPivotAttributes, itemTile } = useKanbanBoard(KANBAN_COLUMN_NAME);\n\n const { title } = getPivotAttributes(column.columnValue);\n const uncategorized = column.columnValue === UNCATEGORIZED_VALUE;\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n\n const eventHandler = useKanbanItemEventHandler({\n column,\n columnFieldPath,\n model,\n change,\n });\n\n return (\n <Board.Column.Root\n data={column}\n location={location}\n classNames='grid grid-rows-[var(--dx-rail-action)_1fr_var(--dx-rail-action)]'\n debug={debug}\n draggable={draggable}\n dragHandle={dragHandle}\n ref={forwardedRef}\n >\n {uncategorized ? (\n <div className='border-b border-separator p-2' data-testid='board-column-header'>\n <span className='font-medium'>{title}</span>\n </div>\n ) : (\n <Board.Column.Header label={title} dragHandleRef={setDragHandle} />\n )}\n <Board.Column.Body\n data={column}\n eventHandler={eventHandler}\n Tile={itemTile as FC<MosaicTileProps<Obj.Unknown>>}\n />\n <Board.Column.Footer\n onAdd={\n onCardAdd\n ? () => onCardAdd(column.columnValue === UNCATEGORIZED_VALUE ? undefined : column.columnValue)\n : undefined\n }\n />\n </Board.Column.Root>\n );\n },\n);\n\nKanbanColumn.displayName = KANBAN_COLUMN_NAME;\n"],
|
|
5
|
-
"mappings": ";;;AAIA,SAAoBA,uBAAuB;AAC3C,OAAOC,UAAgEC,eAAAA,cAAaC,YAAYC,WAAAA,gBAAe;AAE/G,SAASC,OAAAA,YAAW;AACpB,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,YAAYC,uBAAuB;AAC5C,SAASC,SAAAA,QAAOC,YAAAA,iBAAgB;AAGhC,SAASC,qBAAqBC,mCAAmC;AACjE,SAASC,QAAAA,aAAY;AACrB,SAAsBC,4BAAAA,2BAA0BC,uBAAAA,4BAA2B;;;ACX3E,SAASC,qBAAqB;AAO9B,SAA0DC,0BAA0BC,2BAA2B;AAE/G,IAAMC,oBAAoB;AA+BnB,IAAM,CAACC,oBAAoBC,cAAAA,IAAkBL,cAAuCG,mBAAmB;EAC5GG,UAAU;EACVC,YAAYC;EACZC,iBAAiBD;EACjBE,QAAQ;IAAEC,QAAQ,MAAA;IAAO;IAAGC,cAAc,MAAA;IAAO;EAAE;EACnDC,cAAcL;EACdM,oBAAoB,CAACC,OACnBA,OAAOb,sBAAsBD,2BAA2B;IAAEe,OAAOD;IAAIE,OAAO;EAAU;EACxFC,UAAW,MAAM;AACnB,CAAA;;;ACjDA,OAAOC,SAASC,YAAYC,aAAaC,SAASC,gBAAgB;AAElE,SAASC,eAAe;AACxB,SAASC,YAAYC,0BAA0B;AAC/C,SAASC,WAAW;AACpB,SAASC,MAAMC,
|
|
6
|
-
"names": ["RegistryContext", "React", "useCallback", "useContext", "useMemo", "Obj", "useTranslation", "composable", "composableProps", "Board", "useBoard", "useKanbanBoardModel", "useKanbanColumnEventHandler", "meta", "UNCATEGORIZED_ATTRIBUTES", "UNCATEGORIZED_VALUE", "createContext", "UNCATEGORIZED_ATTRIBUTES", "UNCATEGORIZED_VALUE", "KANBAN_BOARD_NAME", "KanbanBoardContext", "useKanbanBoard", "kanbanId", "projection", "undefined", "columnFieldPath", "change", "kanban", "setItemField", "pivotFieldId", "getPivotAttributes", "id", "title", "color", "itemTile", "React", "forwardRef", "useCallback", "useMemo", "useState", "Surface", "AppSurface", "useObjectMenuItems", "Obj", "Card", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { type ComponentPropsWithoutRef, type PropsWithChildren, useCallback, useContext, useMemo } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { Board, useBoard } from '@dxos/react-ui-mosaic';\nimport type { ProjectionModel } from '@dxos/schema';\n\nimport { useKanbanBoardModel, useKanbanColumnEventHandler } from '#hooks';\nimport { meta } from '#meta';\nimport { type Kanban, UNCATEGORIZED_ATTRIBUTES, UNCATEGORIZED_VALUE } from '#types';\n\nimport {\n KanbanBoardContext,\n type KanbanBoardContextValue,\n type KanbanCardProps,\n type KanbanColumnProps,\n useKanbanBoard,\n} from './context';\nimport { KanbanCard } from './KanbanCard';\nimport { KanbanColumn } from './KanbanColumn';\n\n// TODO(burdon): Rename Kanban.\n\n//\n// Root\n//\n\nconst KANBAN_BOARD_ROOT = 'KanbanBoard.Root';\n\ntype KanbanBoardRootProps = PropsWithChildren<\n {\n kanban: Kanban.Kanban;\n /** Required when providing context; Root derives columnFieldPath, pivotFieldId, getPivotAttributes from kanban + projection. */\n projection: ProjectionModel;\n /** Atom of items (e.g. from AtomQuery for DB, or Atom.make([]) for in-memory). */\n items: Atom.Atom<Obj.Unknown[]>;\n onCardAdd?: (columnValue: string | undefined) => string | undefined;\n onCardRemove?: (card: Obj.Unknown) => void;\n } & Pick<KanbanBoardContextValue, 'change' | 'itemTile'> &\n ComponentPropsWithoutRef<'div'>\n>;\n\nexport const KanbanBoardRoot = ({\n children,\n kanban,\n projection,\n items,\n change,\n itemTile = KanbanCard,\n onCardAdd,\n onCardRemove,\n}: KanbanBoardRootProps) => {\n const registry = useContext(RegistryContext);\n const { t } = useTranslation(meta.profile.key);\n const model = useKanbanBoardModel(kanban, projection, items, registry);\n const columns = model?.getColumns?.() ?? [];\n const view = kanban?.spec.kind === 'view' ? kanban.spec.view.target : undefined;\n const pivotFieldId = view?.projection?.pivotFieldId;\n const columnFieldPath = useMemo(() => {\n // Items-variant kanbans use the property name itself as the pivot field\n // (no view/projection translation layer).\n if (kanban?.spec.kind === 'items') {\n return kanban.spec.pivotField;\n }\n if (pivotFieldId === undefined || !projection) {\n return undefined;\n }\n\n return projection.tryGetFieldProjection(pivotFieldId)?.props.property;\n }, [kanban?.spec, projection, pivotFieldId]);\n\n const getPivotAttributes = useCallback<KanbanBoardContextValue['getPivotAttributes']>(\n (columnValue) => {\n if (columnValue === UNCATEGORIZED_VALUE) {\n return UNCATEGORIZED_ATTRIBUTES;\n }\n\n const options = projection?.tryGetFieldProjection(pivotFieldId ?? '')?.props.options ?? [];\n const option = options.find((option) => option.id === columnValue);\n return option ?? ({ title: columnValue, color: 'neutral' } as const);\n },\n [projection, pivotFieldId],\n );\n\n if (columns.length === 0) {\n return (\n <div className='flex flex-1 items-center justify-center p-8 text-center text-description'>\n {t('select-pivot.placeholder')}\n </div>\n );\n }\n\n return (\n <KanbanBoardContext\n kanbanId={Obj.getURI(kanban)}\n projection={projection}\n columnFieldPath={columnFieldPath}\n pivotFieldId={pivotFieldId}\n getPivotAttributes={getPivotAttributes}\n itemTile={itemTile}\n change={change}\n onCardAdd={onCardAdd}\n onCardRemove={onCardRemove}\n >\n <Board.Root model={model}>{children}</Board.Root>\n </KanbanBoardContext>\n );\n};\n\nKanbanBoardRoot.displayName = KANBAN_BOARD_ROOT;\n\n//\n// KanbanBoardContent\n//\n\nconst KANBAN_BOARD_CONTENT = 'KanbanBoard.Content';\n\ntype KanbanBoardContentProps = {};\n\nexport const KanbanBoardContent = composable<HTMLDivElement, KanbanBoardContentProps>((props, forwardedRef) => {\n const { model } = useBoard(KANBAN_BOARD_CONTENT);\n const { kanbanId, projection, pivotFieldId, change } = useKanbanBoard(KANBAN_BOARD_CONTENT);\n\n const columnEventHandler = useKanbanColumnEventHandler({\n id: `${kanbanId}-columns`,\n model,\n projection: projection ?? undefined,\n pivotFieldId: pivotFieldId ?? undefined,\n change,\n });\n\n return (\n <Board.Content\n {...composableProps(props)}\n ref={forwardedRef}\n id={kanbanId}\n eventHandler={columnEventHandler}\n Tile={KanbanColumn}\n />\n );\n});\n\nKanbanBoardContent.displayName = KANBAN_BOARD_CONTENT;\n\n//\n// KanbanBoard\n//\n\nexport const KanbanBoard = {\n Root: KanbanBoardRoot,\n Content: KanbanBoardContent,\n Column: KanbanColumn,\n Card: KanbanCard,\n};\n\nexport { useKanbanBoard };\n\nexport type { KanbanBoardRootProps as KanbanBoardProps, KanbanCardProps, KanbanColumnProps };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport { type ComponentType } from 'react';\n\nimport { type Obj } from '@dxos/echo';\nimport { type MosaicTileProps } from '@dxos/react-ui-mosaic';\nimport { type ProjectionModel } from '@dxos/schema';\n\nimport { type ColumnStructure, type KanbanChangeCallback, UNCATEGORIZED_ATTRIBUTES, UNCATEGORIZED_VALUE } from '#types';\n\nconst KANBAN_BOARD_NAME = 'KanbanBoard.Context';\n\n/**\n * Card tile props. Defined here (rather than in `KanbanCard.tsx`) so the\n * context type can reference it without forming a cycle through that\n * module's runtime exports — webkit treats the resulting TDZ as a hard\n * error while other engines are lenient.\n */\nexport type KanbanCardProps = Pick<MosaicTileProps<Obj.Unknown>, 'location' | 'data' | 'debug' | 'draggable'>;\n\n/**\n * Column tile props. See note on {@link KanbanCardProps}.\n */\nexport type KanbanColumnProps = Pick<MosaicTileProps<ColumnStructure>, 'location' | 'data' | 'debug' | 'draggable'>;\n\n/**\n * Context value for the Kanban board.\n * Items are Echo objects (Obj.Unknown).\n */\nexport type KanbanBoardContextValue = {\n kanbanId: string;\n projection: ProjectionModel | undefined;\n columnFieldPath: string | undefined;\n change: KanbanChangeCallback<Obj.Unknown>;\n pivotFieldId: string | undefined;\n getPivotAttributes: (columnValue: string) => { title: string; color: string };\n itemTile?: ComponentType<KanbanCardProps>; // TODO(burdon): Prop.\n onCardAdd?: (columnValue: string | undefined) => string | undefined;\n onCardRemove?: (card: Obj.Unknown) => void;\n};\n\nexport const [KanbanBoardContext, useKanbanBoard] = createContext<KanbanBoardContextValue>(KANBAN_BOARD_NAME, {\n kanbanId: 'never',\n projection: undefined,\n columnFieldPath: undefined,\n change: { kanban: () => {}, setItemField: () => {} },\n pivotFieldId: undefined,\n getPivotAttributes: (id: string) =>\n id === UNCATEGORIZED_VALUE ? UNCATEGORIZED_ATTRIBUTES : { title: id, color: 'neutral' },\n itemTile: (() => null) as ComponentType<KanbanCardProps>,\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card, IconButton, useTranslation } from '@dxos/react-ui';\nimport { Menu, createMenuAction } from '@dxos/react-ui-menu';\nimport { Focus, Mosaic, useBoard } from '@dxos/react-ui-mosaic';\n\nimport { meta } from '#meta';\n\nimport { type KanbanCardProps, useKanbanBoard } from './context';\n\nexport { type KanbanCardProps };\n\nconst KANBAN_CARD_TILE_NAME = 'KanbanBoard.Card';\n\n/**\n * Mosaic Tile for Kanban card.\n * Uses Surface for content; requires plugin manager context.\n */\nexport const KanbanCard = forwardRef<HTMLDivElement, KanbanCardProps>(\n ({ data, location, debug, draggable }, forwardedRef) => {\n const { t } = useTranslation(meta.profile.key);\n const { model } = useBoard(KANBAN_CARD_TILE_NAME);\n const { projection, columnFieldPath, onCardRemove } = useKanbanBoard(KANBAN_CARD_TILE_NAME);\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n const dragHandleRef = useCallback((el: HTMLButtonElement | null) => setDragHandle(el), []);\n\n const objectMenuItems = useObjectMenuItems(data);\n\n const menuItems = useMemo(\n () => [\n ...objectMenuItems,\n ...(onCardRemove\n ? [\n createMenuAction('remove', () => onCardRemove(data), {\n label: t('remove-card.label'),\n icon: 'ph--trash--regular',\n }),\n ]\n : []),\n ],\n [objectMenuItems, onCardRemove, data, t],\n );\n\n return (\n <Menu.Root>\n <Mosaic.Tile\n asChild\n id={model.getItemId(data)}\n data={data}\n location={location}\n debug={debug}\n draggable={draggable}\n dragHandle={dragHandle}\n >\n <Focus.Item asChild>\n <Card.Root ref={forwardedRef} data-testid='board-item'>\n <Card.Header>\n <Card.DragHandle ref={dragHandleRef} testId='mosaicBoard.cardDragHandle' />\n <Card.Title data-testid='mosaicBoard.cardTitle'>{Obj.getLabel(data)}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Card.Block end>\n <Menu.Trigger asChild disabled={!menuItems?.length}>\n <IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('action-menu.label')}\n />\n </Menu.Trigger>\n <Menu.Content items={menuItems} />\n </Card.Block>\n </Card.Header>\n <Card.Body>\n {projection && (\n <Surface.Surface\n type={AppSurface.CardContent}\n limit={1}\n data={{\n subject: data,\n projection,\n // Hide the pivot field: its value is already conveyed by\n // which column the card sits in.\n ignorePaths: columnFieldPath ? [columnFieldPath] : undefined,\n }}\n />\n )}\n </Card.Body>\n </Card.Root>\n </Focus.Item>\n </Mosaic.Tile>\n </Menu.Root>\n );\n },\n);\n\nKanbanCard.displayName = KANBAN_CARD_TILE_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { FC, forwardRef, useState } from 'react';\n\nimport type { Obj } from '@dxos/echo';\nimport { Board, type MosaicTileProps, useBoard } from '@dxos/react-ui-mosaic';\n\nimport { useKanbanItemEventHandler } from '#hooks';\nimport { type ColumnStructure, UNCATEGORIZED_VALUE } from '#types';\n\nimport { type KanbanColumnProps, useKanbanBoard } from './context';\n\nexport { type KanbanColumnProps };\n\nconst KANBAN_COLUMN_NAME = 'KanbanBoard.Column';\n\n/**\n * Mosaic Tile for Kanban column.\n */\nexport const KanbanColumn = forwardRef<HTMLDivElement, KanbanColumnProps>(\n ({ data: column, location, debug, draggable }, forwardedRef) => {\n const { model } = useBoard<ColumnStructure, Obj.Unknown>(KANBAN_COLUMN_NAME);\n const { columnFieldPath, change, onCardAdd, getPivotAttributes, itemTile } = useKanbanBoard(KANBAN_COLUMN_NAME);\n\n const { title } = getPivotAttributes(column.columnValue);\n const uncategorized = column.columnValue === UNCATEGORIZED_VALUE;\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n\n const eventHandler = useKanbanItemEventHandler({\n column,\n columnFieldPath,\n model,\n change,\n });\n\n return (\n <Board.Column.Root\n data={column}\n location={location}\n classNames='grid grid-rows-[var(--dx-rail-action)_1fr_var(--dx-rail-action)]'\n debug={debug}\n draggable={draggable}\n dragHandle={dragHandle}\n ref={forwardedRef}\n >\n {uncategorized ? (\n <div className='border-b border-separator p-2' data-testid='board-column-header'>\n <span className='font-medium'>{title}</span>\n </div>\n ) : (\n <Board.Column.Header label={title} dragHandleRef={setDragHandle} />\n )}\n <Board.Column.Body\n data={column}\n eventHandler={eventHandler}\n Tile={itemTile as FC<MosaicTileProps<Obj.Unknown>>}\n />\n <Board.Column.Footer\n onAdd={\n onCardAdd\n ? () => onCardAdd(column.columnValue === UNCATEGORIZED_VALUE ? undefined : column.columnValue)\n : undefined\n }\n />\n </Board.Column.Root>\n );\n },\n);\n\nKanbanColumn.displayName = KANBAN_COLUMN_NAME;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["RegistryContext", "React", "useCallback", "useContext", "useMemo", "Obj", "useTranslation", "composable", "composableProps", "Board", "useBoard", "useKanbanBoardModel", "useKanbanColumnEventHandler", "meta", "UNCATEGORIZED_ATTRIBUTES", "UNCATEGORIZED_VALUE", "createContext", "UNCATEGORIZED_ATTRIBUTES", "UNCATEGORIZED_VALUE", "KANBAN_BOARD_NAME", "KanbanBoardContext", "useKanbanBoard", "kanbanId", "projection", "undefined", "columnFieldPath", "change", "kanban", "setItemField", "pivotFieldId", "getPivotAttributes", "id", "title", "color", "itemTile", "React", "forwardRef", "useCallback", "useMemo", "useState", "Surface", "AppSurface", "useObjectMenuItems", "Obj", "Card", "IconButton", "useTranslation", "Menu", "createMenuAction", "Focus", "Mosaic", "useBoard", "meta", "KANBAN_CARD_TILE_NAME", "KanbanCard", "forwardRef", "data", "location", "debug", "draggable", "forwardedRef", "t", "useTranslation", "meta", "profile", "key", "model", "useBoard", "projection", "columnFieldPath", "onCardRemove", "useKanbanBoard", "dragHandle", "setDragHandle", "useState", "dragHandleRef", "useCallback", "el", "objectMenuItems", "useObjectMenuItems", "menuItems", "useMemo", "createMenuAction", "label", "icon", "Menu", "Root", "Mosaic", "Tile", "asChild", "id", "getItemId", "Focus", "Item", "Card", "ref", "data-testid", "Header", "DragHandle", "testId", "Title", "Obj", "getLabel", "Block", "end", "Trigger", "disabled", "length", "IconButton", "iconOnly", "variant", "Content", "items", "Body", "Surface", "type", "AppSurface", "CardContent", "limit", "subject", "ignorePaths", "undefined", "displayName", "React", "forwardRef", "useState", "Board", "useBoard", "useKanbanItemEventHandler", "UNCATEGORIZED_VALUE", "KANBAN_COLUMN_NAME", "KanbanColumn", "forwardRef", "data", "column", "location", "debug", "draggable", "forwardedRef", "model", "useBoard", "columnFieldPath", "change", "onCardAdd", "getPivotAttributes", "itemTile", "useKanbanBoard", "title", "columnValue", "uncategorized", "UNCATEGORIZED_VALUE", "dragHandle", "setDragHandle", "useState", "eventHandler", "useKanbanItemEventHandler", "React", "Board", "Column", "Root", "classNames", "ref", "div", "className", "data-testid", "span", "Header", "label", "dragHandleRef", "Body", "Tile", "Footer", "onAdd", "undefined", "displayName", "KANBAN_BOARD_ROOT", "KanbanBoardRoot", "children", "kanban", "projection", "items", "change", "itemTile", "KanbanCard", "onCardAdd", "onCardRemove", "registry", "useContext", "RegistryContext", "t", "useTranslation", "meta", "profile", "key", "model", "useKanbanBoardModel", "columns", "getColumns", "view", "spec", "kind", "target", "undefined", "pivotFieldId", "columnFieldPath", "useMemo", "pivotField", "tryGetFieldProjection", "props", "property", "getPivotAttributes", "useCallback", "columnValue", "UNCATEGORIZED_VALUE", "UNCATEGORIZED_ATTRIBUTES", "options", "option", "find", "id", "title", "color", "length", "React", "div", "className", "KanbanBoardContext", "kanbanId", "Obj", "getURI", "Board", "Root", "displayName", "KANBAN_BOARD_CONTENT", "KanbanBoardContent", "composable", "forwardedRef", "useBoard", "useKanbanBoard", "columnEventHandler", "useKanbanColumnEventHandler", "Content", "composableProps", "ref", "eventHandler", "Tile", "KanbanColumn", "KanbanBoard", "Column", "Card"]
|
|
7
7
|
}
|
|
@@ -2,10 +2,10 @@ import "../chunk-J5LGTIGS.mjs";
|
|
|
2
2
|
|
|
3
3
|
// src/containers/index.ts
|
|
4
4
|
import { lazy } from "react";
|
|
5
|
-
var KanbanArticle = lazy(() => import("../KanbanArticle-
|
|
6
|
-
var
|
|
5
|
+
var KanbanArticle = lazy(() => import("../KanbanArticle-JQMQQHRB.mjs"));
|
|
6
|
+
var KanbanProperties = lazy(() => import("../KanbanProperties-W7MZNZVJ.mjs"));
|
|
7
7
|
export {
|
|
8
8
|
KanbanArticle,
|
|
9
|
-
|
|
9
|
+
KanbanProperties
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/containers/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const KanbanArticle: ComponentType<any> = lazy(() => import('./KanbanArticle'));\nexport const
|
|
5
|
-
"mappings": ";;;AAIA,SAA6BA,YAAY;AAElC,IAAMC,gBAAoCD,KAAK,MAAM,OAAO,+BAAA,CAAA;AAC5D,IAAME,
|
|
6
|
-
"names": ["lazy", "KanbanArticle", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const KanbanArticle: ComponentType<any> = lazy(() => import('./KanbanArticle'));\nexport const KanbanProperties: ComponentType<any> = lazy(() => import('./KanbanProperties'));\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAA6BA,YAAY;AAElC,IAAMC,gBAAoCD,KAAK,MAAM,OAAO,+BAAA,CAAA;AAC5D,IAAME,mBAAuCF,KAAK,MAAM,OAAO,kCAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "KanbanArticle", "KanbanProperties"]
|
|
7
7
|
}
|
|
@@ -15,20 +15,25 @@ var create_object_default = Capability.makeModule(Effect.fnUntraced(function* ()
|
|
|
15
15
|
inputSchema: CreateKanbanSchema,
|
|
16
16
|
createObject: (props, options) => Effect.gen(function* () {
|
|
17
17
|
const object = yield* Effect.promise(async () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
if (props.typename) {
|
|
19
|
+
const { view } = await ViewModel.makeFromDatabase({
|
|
20
|
+
db: options.db,
|
|
21
|
+
typename: props.typename,
|
|
22
|
+
pivotFieldName: props.initialPivotColumn
|
|
23
|
+
});
|
|
24
|
+
return Kanban.make({
|
|
25
|
+
name: props.name,
|
|
26
|
+
view
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return Kanban.makeItems({
|
|
24
30
|
name: props.name,
|
|
25
|
-
|
|
31
|
+
pivotField: props.initialPivotColumn ?? ""
|
|
26
32
|
});
|
|
27
33
|
});
|
|
28
34
|
return yield* Operation.invoke(SpaceOperation.AddObject, {
|
|
29
35
|
object,
|
|
30
36
|
target: options.target,
|
|
31
|
-
hidden: true,
|
|
32
37
|
targetNodeId: options.targetNodeId
|
|
33
38
|
});
|
|
34
39
|
})
|
|
@@ -37,4 +42,4 @@ var create_object_default = Capability.makeModule(Effect.fnUntraced(function* ()
|
|
|
37
42
|
export {
|
|
38
43
|
create_object_default as default
|
|
39
44
|
};
|
|
40
|
-
//# sourceMappingURL=create-object-
|
|
45
|
+
//# sourceMappingURL=create-object-DIIFRS57.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/create-object.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { ViewModel } from '@dxos/schema';\n\nimport { CreateKanbanSchema, Kanban } from '#types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {\n id: Type.getTypename(Kanban.Kanban),\n inputSchema: CreateKanbanSchema,\n createObject: (props, options) =>\n Effect.gen(function* () {\n const object = yield* Effect.promise(async () => {\n if (props.typename) {\n const { view } = await ViewModel.makeFromDatabase({\n db: options.db,\n typename: props.typename,\n pivotFieldName: props.initialPivotColumn,\n });\n return Kanban.make({ name: props.name, view });\n }\n return Kanban.makeItems({ name: props.name, pivotField: props.initialPivotColumn ?? '' });\n });\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n targetNodeId: options.targetNodeId,\n });\n }),\n });\n }),\n);\n"],
|
|
5
|
+
"mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AACrB,SAASC,sBAAsB;AAC/B,SAASC,yBAAyB;AAClC,SAASC,iBAAiB;AAE1B,SAASC,oBAAoBC,cAAc;AAE3C,IAAA,wBAAeP,WAAWQ,WACjBC,kBAAW,aAAA;AAChB,SAAOT,WAAWU,YAAYN,kBAAkBO,mBAAmB;IACjEC,IAAIV,KAAKW,YAAYN,OAAOA,MAAM;IAClCO,aAAaR;IACbS,cAAc,CAACC,OAAOC,YACbC,WAAI,aAAA;AACT,YAAMC,SAAS,OAAcC,eAAQ,YAAA;AACnC,YAAIJ,MAAMK,UAAU;AAClB,gBAAM,EAAEC,KAAI,IAAK,MAAMjB,UAAUkB,iBAAiB;YAChDC,IAAIP,QAAQO;YACZH,UAAUL,MAAMK;YAChBI,gBAAgBT,MAAMU;UACxB,CAAA;AACA,iBAAOnB,OAAOoB,KAAK;YAAEC,MAAMZ,MAAMY;YAAMN;UAAK,CAAA;QAC9C;AACA,eAAOf,OAAOsB,UAAU;UAAED,MAAMZ,MAAMY;UAAME,YAAYd,MAAMU,sBAAsB;QAAG,CAAA;MACzF,CAAA;AACA,aAAO,OAAOzB,UAAU8B,OAAO5B,eAAe6B,WAAW;QACvDb;QACAc,QAAQhB,QAAQgB;QAChBC,cAAcjB,QAAQiB;MACxB,CAAA;IACF,CAAA;EACJ,CAAA;AACF,CAAA,CAAA;",
|
|
6
|
+
"names": ["Effect", "Capability", "Operation", "Type", "SpaceOperation", "SpaceCapabilities", "ViewModel", "CreateKanbanSchema", "Kanban", "makeModule", "fnUntraced", "contributes", "CreateObjectEntry", "id", "getTypename", "inputSchema", "createObject", "props", "options", "gen", "object", "promise", "typename", "view", "makeFromDatabase", "db", "pivotFieldName", "initialPivotColumn", "make", "name", "makeItems", "pivotField", "invoke", "AddObject", "target", "targetNodeId"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KanbanOperation_exports
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7TVVF45P.mjs";
|
|
4
4
|
import "./chunk-J5LGTIGS.mjs";
|
|
5
5
|
|
|
6
6
|
// src/operations/delete-card.ts
|
|
@@ -21,4 +21,4 @@ var delete_card_default = handler;
|
|
|
21
21
|
export {
|
|
22
22
|
delete_card_default as default
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=delete-card-
|
|
24
|
+
//# sourceMappingURL=delete-card-TK2G6YHX.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KanbanOperation_exports
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7TVVF45P.mjs";
|
|
4
4
|
import "./chunk-J5LGTIGS.mjs";
|
|
5
5
|
|
|
6
6
|
// src/operations/delete-card-field.ts
|
|
@@ -36,4 +36,4 @@ var delete_card_field_default = handler;
|
|
|
36
36
|
export {
|
|
37
37
|
delete_card_field_default as default
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=delete-card-field-
|
|
39
|
+
//# sourceMappingURL=delete-card-field-LGWPBOUW.mjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
meta
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-V4AVOJVU.mjs";
|
|
4
4
|
import {
|
|
5
5
|
KanbanOperationHandlerSet
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7YLGUKDJ.mjs";
|
|
7
7
|
import {
|
|
8
8
|
CreateKanbanSchema,
|
|
9
9
|
KanbanOperation_exports,
|
|
@@ -13,18 +13,18 @@ import {
|
|
|
13
13
|
PivotColumnAnnotationId,
|
|
14
14
|
UNCATEGORIZED_ATTRIBUTES,
|
|
15
15
|
UNCATEGORIZED_VALUE
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-7TVVF45P.mjs";
|
|
17
17
|
import {
|
|
18
|
-
|
|
19
|
-
} from "./chunk-
|
|
18
|
+
kanban_skill_default
|
|
19
|
+
} from "./chunk-CFPH5R6P.mjs";
|
|
20
20
|
import "./chunk-J5LGTIGS.mjs";
|
|
21
21
|
export {
|
|
22
22
|
CreateKanbanSchema,
|
|
23
23
|
Kanban_exports as Kanban,
|
|
24
|
-
kanban_blueprint_default as KanbanBlueprint,
|
|
25
24
|
KanbanOperation_exports as KanbanOperation,
|
|
26
25
|
KanbanOperationHandlerSet,
|
|
27
26
|
KanbanSettingsSchema,
|
|
27
|
+
kanban_skill_default as KanbanSkill,
|
|
28
28
|
KanbanViewSettingsSchema,
|
|
29
29
|
PivotColumnAnnotationId,
|
|
30
30
|
UNCATEGORIZED_ATTRIBUTES,
|