UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

1 lines 8.44 kB
{"version":3,"file":"index.cjs","sources":["../../src/notes/index.ts"],"sourcesContent":["import { ComponentType, useCallback, useContext, useState } from \"react\";\nimport h from \"../hyper\";\nimport { NotesList } from \"./note\";\nimport NoteDefs from \"./defs\";\nimport { NoteData } from \"./types\";\nimport { useModelEditor, ColumnContext } from \"../context\";\nimport { NoteLayoutProvider, NoteUnderlay } from \"./layout\";\nimport {\n NoteEditor,\n NoteTextEditor,\n NoteEditorContext,\n NoteEditorProvider,\n} from \"./editor\";\nimport { NewNotePositioner } from \"./new\";\nimport { NodeConnectorOptions } from \"./connector\";\nexport * from \"./types\";\nimport type { ReactNode } from \"react\";\n\ninterface NoteComponentProps {\n visibility: string;\n note: NoteData;\n onClick: Function;\n}\n\nfunction NoteComponent(props: NoteComponentProps) {\n const { visibility, note, onClick } = props;\n const text = note.note;\n return h(\n \"p.col-note-label\",\n {\n style: { visibility },\n onClick,\n },\n text,\n );\n}\n\nconst CancelEditUnderlay = function () {\n const { setEditingNote } = useContext(NoteEditorContext) as any;\n return h(NoteUnderlay, {\n onClick(evt) {\n setEditingNote(null);\n evt.stopPropagation();\n },\n });\n};\n\ninterface NotesColumnBaseProps extends NodeConnectorOptions {\n width?: number;\n paddingLeft?: number;\n transform?: string;\n notes?: NoteData[];\n noteComponent?: ComponentType<any>;\n onClickNote?: (note: NoteData) => void;\n children?: ReactNode;\n forceOptions?: object;\n}\n\ninterface EditableNotesColumnProps extends NotesColumnBaseProps {\n inEditMode?: boolean;\n onUpdateNote?: (n: NoteData) => void;\n onDeleteNote?: (n: NoteData) => void;\n onCreateNote?: Function;\n noteEditor?: ComponentType<any>;\n allowPositionEditing?: boolean;\n}\n\ninterface FocusedNotesColumnProps extends NotesColumnBaseProps {\n focusedNote?: NoteData | null;\n onFocusNote?: (note: NoteData | null) => void;\n focusedNoteComponent?: ComponentType<any>;\n}\n\nfunction EditableNotesColumn(props: EditableNotesColumnProps) {\n const {\n width,\n paddingLeft = 60,\n transform,\n notes,\n inEditMode = false,\n onUpdateNote,\n onDeleteNote,\n onCreateNote,\n noteComponent = NoteComponent,\n noteEditor = NoteTextEditor,\n allowPositionEditing = false,\n forceOptions,\n onClickNote,\n } = props;\n\n const innerWidth = width - paddingLeft;\n\n return h(\n NoteLayoutProvider,\n {\n notes,\n width: innerWidth,\n paddingLeft,\n noteComponent,\n forceOptions,\n },\n [\n h(\n NoteEditorProvider,\n {\n inEditMode,\n noteEditor,\n onCreateNote,\n onUpdateNote,\n onDeleteNote,\n },\n [\n h(\"g.section-log\", { transform, className: \"focusable editable\" }, [\n h(NoteDefs),\n h(CancelEditUnderlay),\n h(NotesList, {\n onClickNote,\n }),\n h(NewNotePositioner),\n h(NoteEditor, { allowPositionEditing }),\n ]),\n ],\n ),\n ],\n );\n}\n\nfunction FocusableNoteColumn(props: FocusedNotesColumnProps) {\n /** A notes column with selection capabilities. */\n const {\n width,\n paddingLeft = 60,\n transform,\n notes,\n forceOptions,\n noteComponent = NoteComponent,\n focusedNoteComponent = NoteComponent,\n deltaConnectorAttachment,\n onClickNote,\n } = props;\n\n const innerWidth = width - paddingLeft;\n\n return h(\n NoteLayoutProvider,\n {\n notes,\n width: innerWidth,\n paddingLeft,\n noteComponent,\n forceOptions,\n },\n [\n h(\n NoteEditorProvider,\n {\n inEditMode: true,\n noteEditor: focusedNoteComponent,\n },\n [\n h(\"g.section-log\", { transform, className: \"focusable\" }, [\n h(NoteDefs),\n h(CancelEditUnderlay),\n h(NotesList, {\n onClickNote,\n deltaConnectorAttachment,\n }),\n h(NoteEditor, { allowPositionEditing: false }),\n ]),\n ],\n ),\n ],\n );\n}\n\nfunction StaticNotesColumn(props: NotesColumnBaseProps) {\n /** A non-editable notes column. */\n const {\n width,\n paddingLeft = 60,\n transform,\n notes,\n noteComponent = NoteComponent,\n deltaConnectorAttachment,\n onClickNote,\n forceOptions,\n children,\n } = props;\n\n const innerWidth = width - paddingLeft;\n\n return h(\n NoteLayoutProvider,\n {\n notes,\n width: innerWidth,\n paddingLeft,\n noteComponent,\n forceOptions,\n },\n [\n h(\"g.section-log\", { transform }, [\n h(NoteDefs),\n h(NotesList, {\n deltaConnectorAttachment,\n onClickNote,\n }),\n children,\n ]),\n ],\n );\n}\n\nfunction NotesColumn(props: NotesColumnProps) {\n const { editable = false, ...rest } = props;\n const ctx = useContext(ColumnContext);\n // not sure why we have this here.\n if (ctx?.scaleClamped == null) return null;\n\n let c: ComponentType = StaticNotesColumn;\n if (editable) {\n c = EditableNotesColumn;\n } else if (rest.focusedNoteComponent != null) {\n c = FocusableNoteColumn;\n }\n return h(c, rest);\n}\n\ninterface NotesColumnProps\n extends FocusedNotesColumnProps, EditableNotesColumnProps {\n editable?: boolean;\n}\n\nexport {\n NotesColumn,\n NoteComponent,\n NoteTextEditor,\n NoteEditor,\n NoteEditorContext,\n NotesColumnProps,\n StaticNotesColumn,\n};\n"],"names":["note","h","useContext","NoteEditorContext","NoteUnderlay","NoteTextEditor","NoteLayoutProvider","NoteEditorProvider","NoteDefs","NotesList","NewNotePositioner","NoteEditor","ColumnContext"],"mappings":";;;;;;;;;;AAwBA,SAAS,cAAc,OAA2B;AAChD,QAAM,EAAE,YAAY,MAAAA,OAAM,QAAA,IAAY;AACtC,QAAM,OAAOA,MAAK;AAClB,SAAOC;AAAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO,EAAE,WAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEJ;AAEA,MAAM,qBAAqB,WAAY;AACrC,QAAM,EAAE,eAAA,IAAmBC,MAAAA,WAAWC,wBAAiB;AACvD,SAAOF,MAAEG,OAAAA,cAAc;AAAA,IACrB,QAAQ,KAAK;AACX,qBAAe,IAAI;AACnB,UAAI,gBAAA;AAAA,IACN;AAAA,EAAA,CACD;AACH;AA4BA,SAAS,oBAAoB,OAAiC;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,aAAaC,OAAAA;AAAAA,IACb,uBAAuB;AAAA,IACvB;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,aAAa,QAAQ;AAE3B,SAAOJ;AAAAA,IACLK,OAAAA;AAAAA,IACA;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACEL;AAAAA,QACEM,OAAAA;AAAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF;AAAA,UACEN,MAAE,iBAAiB,EAAE,WAAW,WAAW,wBAAwB;AAAA,YACjEA,MAAEO,IAAQ;AAAA,YACVP,MAAE,kBAAkB;AAAA,YACpBA,MAAEQ,KAAAA,WAAW;AAAA,cACX;AAAA,YAAA,CACD;AAAA,YACDR,MAAES,KAAAA,iBAAiB;AAAA,YACnBT,MAAEU,OAAAA,YAAY,EAAE,qBAAA,CAAsB;AAAA,UAAA,CACvC;AAAA,QAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,SAAS,oBAAoB,OAAgC;AAE3D,QAAM;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,aAAa,QAAQ;AAE3B,SAAOV;AAAAA,IACLK,OAAAA;AAAAA,IACA;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACEL;AAAAA,QACEM,OAAAA;AAAAA,QACA;AAAA,UACE,YAAY;AAAA,UACZ,YAAY;AAAA,QAAA;AAAA,QAEd;AAAA,UACEN,MAAE,iBAAiB,EAAE,WAAW,WAAW,eAAe;AAAA,YACxDA,MAAEO,IAAQ;AAAA,YACVP,MAAE,kBAAkB;AAAA,YACpBA,MAAEQ,KAAAA,WAAW;AAAA,cACX;AAAA,cACA;AAAA,YAAA,CACD;AAAA,YACDR,MAAEU,OAAAA,YAAY,EAAE,sBAAsB,OAAO;AAAA,UAAA,CAC9C;AAAA,QAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,SAAS,kBAAkB,OAA6B;AAEtD,QAAM;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,aAAa,QAAQ;AAE3B,SAAOV;AAAAA,IACLK,OAAAA;AAAAA,IACA;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACEL,MAAE,iBAAiB,EAAE,aAAa;AAAA,QAChCA,MAAEO,IAAQ;AAAA,QACVP,MAAEQ,KAAAA,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QAAA,CACD;AAAA,QACD;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EACH;AAEJ;AAEA,SAAS,YAAY,OAAyB;AAC5C,QAAM,EAAE,WAAW,OAAO,GAAG,SAAS;AACtC,QAAM,MAAMP,MAAAA,WAAWU,oBAAa;AAEpC,MAAI,KAAK,gBAAgB,KAAM,QAAO;AAEtC,MAAI,IAAmB;AACvB,MAAI,UAAU;AACZ,QAAI;AAAA,EACN,WAAW,KAAK,wBAAwB,MAAM;AAC5C,QAAI;AAAA,EACN;AACA,SAAOX,MAAE,GAAG,IAAI;AAClB;;;;;;;"}