{"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":"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"}