@lblod/ember-rdfa-editor 13.1.0 → 13.1.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.
Files changed (94) hide show
  1. package/README.md +165 -95
  2. package/dist/commands/_private/rdfa-commands/remove-backlink.js +1 -1
  3. package/dist/commands/_private/rdfa-commands/select-node-by-rdfa-id.js +1 -1
  4. package/dist/commands/_private/rdfa-commands/select-node-by-subject.js +1 -1
  5. package/dist/commands/_private/rdfa-commands/wrap-inline-resource.js +1 -1
  6. package/dist/commands/_private/rdfa-commands/wrap-literal.js +1 -1
  7. package/dist/commands/_private/rdfa-commands/wrap-resource.js +1 -1
  8. package/dist/commands/rdfa-commands/add-property.js +1 -1
  9. package/dist/commands/rdfa-commands/remove-property.js +1 -1
  10. package/dist/components/_private/attribute-editor/index.js +1 -1
  11. package/dist/components/_private/attribute-editor/index.js.map +1 -1
  12. package/dist/components/_private/common/configurable-rdfa-display.js +1 -1
  13. package/dist/components/_private/common/property-details.js +1 -1
  14. package/dist/components/_private/debug-info/index.js +1 -1
  15. package/dist/components/_private/debug-info/index.js.map +1 -1
  16. package/dist/components/_private/doc-editor/info-pill.js.map +1 -1
  17. package/dist/components/_private/doc-editor/lang-pill.js.map +1 -1
  18. package/dist/components/_private/doc-imported-resource-editor/card.js +1 -1
  19. package/dist/components/_private/doc-imported-resource-editor/card.js.map +1 -1
  20. package/dist/components/_private/doc-imported-resource-editor/form.js.map +1 -1
  21. package/dist/components/_private/external-triple-editor/card.js +1 -1
  22. package/dist/components/_private/external-triple-editor/card.js.map +1 -1
  23. package/dist/components/_private/external-triple-editor/form.js.map +1 -1
  24. package/dist/components/_private/imported-resource-linker/card.js +1 -1
  25. package/dist/components/_private/imported-resource-linker/card.js.map +1 -1
  26. package/dist/components/_private/node-controls/card.js +1 -1
  27. package/dist/components/_private/node-controls/card.js.map +1 -1
  28. package/dist/components/_private/node-controls/remove-node.js.map +1 -1
  29. package/dist/components/_private/node-controls/wrapping-utils.js +1 -1
  30. package/dist/components/_private/node-controls/wrapping-utils.js.map +1 -1
  31. package/dist/components/_private/rdfa-visualiser/rdfa-explorer.js +1 -1
  32. package/dist/components/_private/rdfa-visualiser/rdfa-explorer.js.map +1 -1
  33. package/dist/components/_private/rdfa-visualiser/resource-info.js +1 -1
  34. package/dist/components/_private/rdfa-visualiser/resource-info.js.map +1 -1
  35. package/dist/components/_private/rdfa-visualiser/visualiser-card.js +2 -2
  36. package/dist/components/_private/rdfa-visualiser/visualiser-card.js.map +1 -1
  37. package/dist/components/_private/relationship-editor/card.js +1 -1
  38. package/dist/components/_private/relationship-editor/card.js.map +1 -1
  39. package/dist/components/_private/relationship-editor/content-predicate-form.js.map +1 -1
  40. package/dist/components/_private/relationship-editor/create-button.js.map +1 -1
  41. package/dist/components/_private/relationship-editor/modals/classic.js.map +1 -1
  42. package/dist/components/_private/relationship-editor/modals/dev-mode.js +1 -1
  43. package/dist/components/_private/relationship-editor/modals/dev-mode.js.map +1 -1
  44. package/dist/components/collapsible.js.map +1 -1
  45. package/dist/components/debug-tools.js.map +1 -1
  46. package/dist/components/editor.js +3 -3
  47. package/dist/components/editor.js.map +1 -1
  48. package/dist/components/ember-node/embedded-editor.js +2 -2
  49. package/dist/components/ember-node/embedded-editor.js.map +1 -1
  50. package/dist/components/ember-node/inline-rdfa.js.map +1 -1
  51. package/dist/components/plugins/alignment/alignment-menu.js +2 -2
  52. package/dist/components/plugins/alignment/alignment-menu.js.map +1 -1
  53. package/dist/components/plugins/heading/heading-menu.js +2 -2
  54. package/dist/components/plugins/heading/heading-menu.js.map +1 -1
  55. package/dist/components/plugins/html-editor/menu.js.map +1 -1
  56. package/dist/components/plugins/html-editor/modal.js.map +1 -1
  57. package/dist/components/plugins/image/insert-menu.js.map +1 -1
  58. package/dist/components/plugins/link/link-editor.js +1 -1
  59. package/dist/components/plugins/list/ordered.js +3 -3
  60. package/dist/components/plugins/list/ordered.js.map +1 -1
  61. package/dist/components/plugins/list/unordered.js +1 -1
  62. package/dist/components/plugins/table/color.js.map +1 -1
  63. package/dist/components/plugins/table/table-menu.js.map +1 -1
  64. package/dist/components/plugins/table/table-tooltip.js.map +1 -1
  65. package/dist/components/plugins/table/vertical-align.js +2 -2
  66. package/dist/components/plugins/table/vertical-align.js.map +1 -1
  67. package/dist/components/plugins/text-style/color.js.map +1 -1
  68. package/dist/components/plugins/text-style/highlight.js.map +1 -1
  69. package/dist/components/toolbar/dropdown.js.map +1 -1
  70. package/dist/components/toolbar/mark.js +1 -1
  71. package/dist/components/utils/au-pill-dropdown.js.map +1 -1
  72. package/dist/core/keymap.js +1 -1
  73. package/dist/core/rdfa-types.js +1 -1
  74. package/dist/core/say-controller.js +1 -1
  75. package/dist/core/say-controller.js.map +1 -1
  76. package/dist/core/say-data-factory/data-factory.js.map +1 -1
  77. package/dist/core/say-data-factory/named-node.js.map +1 -1
  78. package/dist/core/say-editor.js.map +1 -1
  79. package/dist/core/say-view.js.map +1 -1
  80. package/dist/{main-CBbqRlCI.js → main-dUbkrxFL.js} +133 -358
  81. package/dist/main-dUbkrxFL.js.map +1 -0
  82. package/dist/nodes/invisible-rdfa.js +1 -1
  83. package/dist/plugins/list/commands/lift-out-of-nested-lists.js +1 -1
  84. package/dist/plugins/list/nodes/on-changed.js +1 -1
  85. package/dist/plugins/list/nodes/on-changed.js.map +1 -1
  86. package/dist/plugins/rdfa-info/index.js +1 -1
  87. package/dist/plugins/rdfa-info/types.js +1 -1
  88. package/dist/plugins/remove-properties-of-deleted-nodes/index.js +1 -1
  89. package/dist/utils/_private/datastore/graphy-dataset.js +1 -1
  90. package/dist/utils/_private/datastore/term-mapping.js.map +1 -1
  91. package/dist/utils/_private/rdfa-parser/rdfa-parser.js.map +1 -1
  92. package/dist/utils/transaction-utils.js.map +1 -1
  93. package/package.json +42 -42
  94. package/dist/main-CBbqRlCI.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"wrapping-utils.js","sources":["../../../../src/components/_private/node-controls/wrapping-utils.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport {\n wrapInlineResource,\n wrapLiteral,\n wrapResource,\n} from '#root/commands/_private/rdfa-commands/index.ts';\nimport { wrapInlineLiteral } from '#root/commands/_private/rdfa-commands/wrap-inline-literal.ts';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuContent from '@appuniversum/ember-appuniversum/components/au-content';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { not } from 'ember-truth-helpers';\nimport { modifier } from 'ember-modifier';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuRadioGroup from '@appuniversum/ember-appuniversum/components/au-radio-group';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\n\ntype WrappingUtilsArgs = {\n controller?: SayController;\n};\n\nexport default class WrappingUtils extends Component<WrappingUtilsArgs> {\n @tracked modalOpen = false;\n @tracked wrapWithResource;\n\n constructor(owner: unknown, args: WrappingUtilsArgs) {\n super(owner, args);\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'r':\n // Wrap with block resource\n this.openModal(false);\n break;\n case 'R':\n // Wrap with inline resource\n this.openModal(true);\n break;\n case 'l':\n // Wrap with block literal\n this.wrapWithLiteralNode();\n break;\n case 'L':\n // Wrap with inline literal\n this.wrapWithInlineLiteralNode();\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n openModal = (inline: boolean) => {\n if (inline) {\n this.wrapWithResource = this.wrapWithInlineResource;\n } else {\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n this.modalOpen = true;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get controller() {\n return this.args.controller;\n }\n\n get canWrapWithLiteral() {\n return this.controller?.checkCommand(wrapLiteral());\n }\n get canWrapWithInlineLiteral() {\n return this.controller?.checkCommand(wrapInlineLiteral());\n }\n wrapWithLiteralNode = () => {\n this.controller?.doCommand(wrapLiteral());\n };\n\n wrapWithBlockResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapResource(details));\n this.closeModal();\n };\n wrapWithInlineLiteralNode = () => {\n this.controller?.doCommand(wrapInlineLiteral());\n };\n wrapWithInlineResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapInlineResource(details));\n this.closeModal();\n };\n\n <template>\n <AuContent @skin=\"tiny\" {{this.setUpListeners}}>\n <AuToolbar as |Group|>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal false)}}\n >\n Wrap With Block Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithLiteral}}\n {{on \"click\" this.wrapWithLiteralNode}}\n >\n Wrap With Block Literal\n </AuButton>\n </Group>\n\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal true)}}\n >\n Wrap With Inline Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithInlineLiteral}}\n {{on \"click\" this.wrapWithInlineLiteralNode}}\n >\n Wrap With Inline Literal\n </AuButton>\n </Group>\n </AuToolbar>\n </AuContent>\n\n <Modal\n @modalOpen={{this.modalOpen}}\n @closeModal={{this.closeModal}}\n @wrapWithResource={{this.wrapWithResource}}\n />\n </template>\n}\n\ntype ModalArgs = {\n closeModal: () => void;\n modalOpen: boolean;\n wrapWithResource: WrappingUtils['wrapWithResource'];\n};\n\nclass Modal extends Component<ModalArgs> {\n @tracked initiallyFocusedElement?: HTMLElement;\n\n setupFormSubmitShortcut = modifier((formElement: HTMLFormElement) => {\n const ctrlEnterHandler = (event: KeyboardEvent) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n formElement.requestSubmit();\n }\n };\n window.addEventListener('keydown', ctrlEnterHandler);\n return () => window.removeEventListener('keydown', ctrlEnterHandler);\n });\n\n initialFocus = modifier((element: HTMLElement) => {\n this.initiallyFocusedElement = element;\n });\n\n @tracked generateNewUri = 'yes';\n @tracked resourceUriBase = '';\n\n updateUriBase = (event: InputEvent) => {\n this.resourceUriBase = (event.target as HTMLInputElement).value;\n };\n shouldGenerateNewUri = (value: 'yes' | 'no') => {\n this.generateNewUri = value;\n };\n\n save = (event: Event) => {\n event.preventDefault();\n if (this.isNewUri) {\n this.args.wrapWithResource({ uriBase: this.resourceUriBase });\n } else {\n this.args.wrapWithResource({ existingUri: this.resourceUriBase });\n }\n };\n\n get canSave() {\n return !!this.resourceUriBase;\n }\n get isNewUri() {\n return this.generateNewUri === 'yes';\n }\n\n <template>\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{@modalOpen}}\n @closable={{true}}\n @closeModal={{@closeModal}}\n {{! @glint-expect-error appuniversum types should be adapted to accept an html element here }}\n @initialFocus={{this.initiallyFocusedElement}}\n >\n <:title>Wrap selection</:title>\n <:body>\n <form\n class=\"au-c-form\"\n id={{formId}}\n {{on \"submit\" this.save}}\n {{this.setupFormSubmitShortcut}}\n >\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n Generate new URI?\n </AuLabel>\n <AuRadioGroup\n id={{id}}\n required={{true}}\n @name=\"isNew\"\n @selected={{this.generateNewUri}}\n @onChange={{this.shouldGenerateNewUri}}\n @alignment=\"inline\"\n as |Group|\n >\n <Group.Radio @value=\"yes\">Yes</Group.Radio>\n <Group.Radio @value=\"no\">No</Group.Radio>\n </AuRadioGroup>\n </WithUniqueId>\n </AuFormRow>\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n {{#if this.isNewUri}}URI base{{else}}Existing URI{{/if}}\n </AuLabel>\n <AuInput\n {{this.initialFocus}}\n id={{id}}\n required={{true}}\n value={{this.resourceUriBase}}\n @width=\"block\"\n placeholder=\"http://example.com/resource/\"\n {{on \"input\" this.updateUriBase}}\n />\n </WithUniqueId>\n </AuFormRow>\n </form>\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton\n form={{formId}}\n type=\"submit\"\n @disabled={{not this.canSave}}\n >\n Save\n </AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" @closeModal}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n </template>\n}\n"],"names":["WrappingUtils","Component","g","prototype","tracked","i","void 0","constructor","owner","args","wrapWithResource","wrapWithBlockResource","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","openModal","wrapWithLiteralNode","wrapWithInlineLiteralNode","window","addEventListener","removeEventListener","inline","wrapWithInlineResource","modalOpen","closeModal","controller","canWrapWithLiteral","checkCommand","wrapLiteral","canWrapWithInlineLiteral","wrapInlineLiteral","doCommand","details","wrapResource","wrapInlineResource","setComponentTemplate","precompileTemplate","strictMode","scope","AuContent","AuToolbar","AuButton","PlusIcon","on","fn","not","Modal","setupFormSubmitShortcut","formElement","ctrlEnterHandler","metaKey","requestSubmit","initialFocus","element","initiallyFocusedElement","updateUriBase","resourceUriBase","target","value","shouldGenerateNewUri","generateNewUri","save","preventDefault","isNewUri","uriBase","existingUri","canSave","WithUniqueId","AuModal","AuFormRow","AuLabel","AuRadioGroup","AuInput","AuButtonGroup"],"mappings":"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"}
1
+ {"version":3,"file":"wrapping-utils.js","sources":["../../../../src/components/_private/node-controls/wrapping-utils.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport {\n wrapInlineResource,\n wrapLiteral,\n wrapResource,\n} from '#root/commands/_private/rdfa-commands/index.ts';\nimport { wrapInlineLiteral } from '#root/commands/_private/rdfa-commands/wrap-inline-literal.ts';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuContent from '@appuniversum/ember-appuniversum/components/au-content';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { not } from 'ember-truth-helpers';\nimport { modifier } from 'ember-modifier';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuRadioGroup from '@appuniversum/ember-appuniversum/components/au-radio-group';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\n\ntype WrappingUtilsArgs = {\n controller?: SayController;\n};\n\nexport default class WrappingUtils extends Component<WrappingUtilsArgs> {\n @tracked modalOpen = false;\n @tracked wrapWithResource;\n\n constructor(owner: unknown, args: WrappingUtilsArgs) {\n super(owner, args);\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'r':\n // Wrap with block resource\n this.openModal(false);\n break;\n case 'R':\n // Wrap with inline resource\n this.openModal(true);\n break;\n case 'l':\n // Wrap with block literal\n this.wrapWithLiteralNode();\n break;\n case 'L':\n // Wrap with inline literal\n this.wrapWithInlineLiteralNode();\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n openModal = (inline: boolean) => {\n if (inline) {\n this.wrapWithResource = this.wrapWithInlineResource;\n } else {\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n this.modalOpen = true;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get controller() {\n return this.args.controller;\n }\n\n get canWrapWithLiteral() {\n return this.controller?.checkCommand(wrapLiteral());\n }\n get canWrapWithInlineLiteral() {\n return this.controller?.checkCommand(wrapInlineLiteral());\n }\n wrapWithLiteralNode = () => {\n this.controller?.doCommand(wrapLiteral());\n };\n\n wrapWithBlockResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapResource(details));\n this.closeModal();\n };\n wrapWithInlineLiteralNode = () => {\n this.controller?.doCommand(wrapInlineLiteral());\n };\n wrapWithInlineResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapInlineResource(details));\n this.closeModal();\n };\n\n <template>\n <AuContent @skin=\"tiny\" {{this.setUpListeners}}>\n <AuToolbar as |Group|>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal false)}}\n >\n Wrap With Block Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithLiteral}}\n {{on \"click\" this.wrapWithLiteralNode}}\n >\n Wrap With Block Literal\n </AuButton>\n </Group>\n\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal true)}}\n >\n Wrap With Inline Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithInlineLiteral}}\n {{on \"click\" this.wrapWithInlineLiteralNode}}\n >\n Wrap With Inline Literal\n </AuButton>\n </Group>\n </AuToolbar>\n </AuContent>\n\n <Modal\n @modalOpen={{this.modalOpen}}\n @closeModal={{this.closeModal}}\n @wrapWithResource={{this.wrapWithResource}}\n />\n </template>\n}\n\ntype ModalArgs = {\n closeModal: () => void;\n modalOpen: boolean;\n wrapWithResource: WrappingUtils['wrapWithResource'];\n};\n\nclass Modal extends Component<ModalArgs> {\n @tracked initiallyFocusedElement?: HTMLElement;\n\n setupFormSubmitShortcut = modifier((formElement: HTMLFormElement) => {\n const ctrlEnterHandler = (event: KeyboardEvent) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n formElement.requestSubmit();\n }\n };\n window.addEventListener('keydown', ctrlEnterHandler);\n return () => window.removeEventListener('keydown', ctrlEnterHandler);\n });\n\n initialFocus = modifier((element: HTMLElement) => {\n this.initiallyFocusedElement = element;\n });\n\n @tracked generateNewUri = 'yes';\n @tracked resourceUriBase = '';\n\n updateUriBase = (event: InputEvent) => {\n this.resourceUriBase = (event.target as HTMLInputElement).value;\n };\n shouldGenerateNewUri = (value: 'yes' | 'no') => {\n this.generateNewUri = value;\n };\n\n save = (event: Event) => {\n event.preventDefault();\n if (this.isNewUri) {\n this.args.wrapWithResource({ uriBase: this.resourceUriBase });\n } else {\n this.args.wrapWithResource({ existingUri: this.resourceUriBase });\n }\n };\n\n get canSave() {\n return !!this.resourceUriBase;\n }\n get isNewUri() {\n return this.generateNewUri === 'yes';\n }\n\n <template>\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{@modalOpen}}\n @closable={{true}}\n @closeModal={{@closeModal}}\n {{! @glint-expect-error appuniversum types should be adapted to accept an html element here }}\n @initialFocus={{this.initiallyFocusedElement}}\n >\n <:title>Wrap selection</:title>\n <:body>\n <form\n class=\"au-c-form\"\n id={{formId}}\n {{on \"submit\" this.save}}\n {{this.setupFormSubmitShortcut}}\n >\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n Generate new URI?\n </AuLabel>\n <AuRadioGroup\n id={{id}}\n required={{true}}\n @name=\"isNew\"\n @selected={{this.generateNewUri}}\n @onChange={{this.shouldGenerateNewUri}}\n @alignment=\"inline\"\n as |Group|\n >\n <Group.Radio @value=\"yes\">Yes</Group.Radio>\n <Group.Radio @value=\"no\">No</Group.Radio>\n </AuRadioGroup>\n </WithUniqueId>\n </AuFormRow>\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n {{#if this.isNewUri}}URI base{{else}}Existing URI{{/if}}\n </AuLabel>\n <AuInput\n {{this.initialFocus}}\n id={{id}}\n required={{true}}\n value={{this.resourceUriBase}}\n @width=\"block\"\n placeholder=\"http://example.com/resource/\"\n {{on \"input\" this.updateUriBase}}\n />\n </WithUniqueId>\n </AuFormRow>\n </form>\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton\n form={{formId}}\n type=\"submit\"\n @disabled={{not this.canSave}}\n >\n Save\n </AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" @closeModal}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n </template>\n}\n"],"names":["WrappingUtils","Component","g","prototype","tracked","i","constructor","owner","args","wrapWithResource","wrapWithBlockResource","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","openModal","wrapWithLiteralNode","wrapWithInlineLiteralNode","window","addEventListener","removeEventListener","inline","wrapWithInlineResource","modalOpen","closeModal","controller","canWrapWithLiteral","checkCommand","wrapLiteral","canWrapWithInlineLiteral","wrapInlineLiteral","doCommand","details","wrapResource","wrapInlineResource","setComponentTemplate","precompileTemplate","strictMode","scope","AuContent","AuToolbar","AuButton","PlusIcon","on","fn","not","Modal","setupFormSubmitShortcut","formElement","ctrlEnterHandler","metaKey","requestSubmit","initialFocus","element","initiallyFocusedElement","updateUriBase","resourceUriBase","target","value","shouldGenerateNewUri","generateNewUri","save","preventDefault","isNewUri","uriBase","existingUri","canSave","WithUniqueId","AuModal","AuFormRow","AuLabel","AuRadioGroup","AuInput","AuButtonGroup"],"mappings":"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"}
@@ -17,7 +17,7 @@ import '../../../utils/_private/constants.js';
17
17
  import 'uuid';
18
18
  import 'relative-to-absolute-iri';
19
19
  import 'rdf-data-factory';
20
- import '../../../main-CBbqRlCI.js';
20
+ import '../../../main-dUbkrxFL.js';
21
21
  import '../../../config/rdfa.js';
22
22
  import 'iter-tools';
23
23
  import { selectNodeBySubject } from '../../../commands/_private/rdfa-commands/select-node-by-subject.js';
@@ -1 +1 @@
1
- {"version":3,"file":"rdfa-explorer.js","sources":["../../../../src/components/_private/rdfa-visualiser/rdfa-explorer.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { trackedReset } from 'tracked-toolbox';\nimport { keepLatestTask, timeout } from 'ember-concurrency';\nimport t from 'ember-intl/helpers/t';\nimport { not, or } from 'ember-truth-helpers';\nimport AuLoader from '@appuniversum/ember-appuniversum/components/au-loader';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport {\n rdfaInfoPluginKey,\n type RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/index.ts';\nimport { type RdfaInfo } from '#root/plugins/rdfa-info/plugin.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport ResourceInfo from '#root/components/_private/rdfa-visualiser/resource-info.gts';\n\ninterface Sig {\n Args: {\n controller: SayController;\n config: RdfaVisualizerConfig;\n };\n}\n\nexport default class RdfaExplorer extends Component<Sig> {\n get rdfaInfo() {\n return rdfaInfoPluginKey.getState(\n this.args.controller.mainEditorState,\n // We need to set this type as otherwise glint complains about private members of anonymous\n // classes, even though it shouldn't be anonymous...\n ) as RdfaInfo;\n }\n computeMappingsTask = keepLatestTask(async () => {\n const abortController = new AbortController();\n try {\n const maps = await this.rdfaInfo?.computeMappingsAsync(\n abortController.signal,\n );\n this.subjects = Array.from(maps.topLevelSubjects);\n this.isRunning = false;\n await timeout(this.args.config.debounceTime || 1000);\n } finally {\n abortController.abort();\n }\n });\n\n @tracked subjects?: string[];\n @trackedReset<RdfaExplorer, boolean>({\n memo: 'rdfaInfo',\n update: (component) => {\n component.computeMappingsTask.perform().catch((err: unknown) => {\n if (\n !err ||\n typeof err !== 'object' ||\n !('name' in err) ||\n err.name !== 'TaskCancelation'\n ) {\n console.error('Error computing mappings', err);\n }\n });\n return true;\n },\n })\n isRunning = false;\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.isRunning}}\n <AuLoader @hideMessage={{true}}>\n {{t \"ember-rdfa-editor.utils.loading\"}}\n </AuLoader>\n {{/if}}\n {{! TODO Keeping it open is nicer user experience, but maybe we can have a similar exp by storing a list of 'expanded' states for resources}}\n {{#if (or @config.keepOpen (not this.isRunning))}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.subjects as |subject|}}\n <ResourceInfo\n @wrapper={{Item}}\n @controller={{@controller}}\n @subject={{subject}}\n @isTopLevel={{true}}\n @displayConfig={{@config.displayConfig}}\n />\n {{/each}}\n </AuList>\n {{/if}}\n </template>\n}\n"],"names":["RdfaExplorer","Component","rdfaInfo","rdfaInfoPluginKey","getState","args","controller","mainEditorState","computeMappingsTask","_buildTask","context","generator","abortController","AbortController","maps","computeMappingsAsync","signal","subjects","Array","from","topLevelSubjects","isRunning","timeout","config","debounceTime","abort","g","prototype","tracked","i","void 0","trackedReset","memo","update","component","perform","catch","err","name","console","error","goToSubject","subject","doCommand","selectNodeBySubject","view","mainEditorView","focus","setComponentTemplate","precompileTemplate","strictMode","scope","AuLoader","t","or","not","AuList","ResourceInfo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBe,MAAMA,qBAAqBC,SAAA,CAAU;EAClD,IAAIC,QAAAA,GAAW;IACb,OAAOC,iBAAA,CAAkBC,QAAQ,CAC/B,IAAI,CAACC,IAAI,CAACC,UAAU,CAACC,eAAe,CAAA;AAIxC,EAAA;AACAC,EAAAA,mBAAA,GAAAC,SAAA,CAAA,OAAA;IAAAC,OAAA,EAAA,IAAA;IAAAC,SAAA,EAAA,aAAqC;AACnC,MAAA,MAAMC,kBAAkB,IAAIC,eAAA,EAAA;MAC5B,IAAI;QACF,MAAMC,IAAA,GAAA,MAAa,IAAI,CAACZ,QAAQ,EAAEa,oBAAA,CAChCH,gBAAgBI,MAAM,CAAA;QAExB,IAAI,CAACC,QAAQ,GAAGC,MAAMC,IAAI,CAACL,KAAKM,gBAAgB,CAAA;QAChD,IAAI,CAACC,SAAS,GAAG,KAAA;QACjB,MAAMC,OAAA,CAAQ,IAAI,CAACjB,IAAI,CAACkB,MAAM,CAACC,YAAY,IAAI,IAAA,CAAA;AACjD,MAAA,CAAA,SAAU;QACRZ,eAAA,CAAgBa,KAAK,EAAA;AACvB,MAAA;AACF,IAAA;AAAA,GAAA,CAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,YAAA,CAAA;AAAG,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAEFC,OAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;AAAAJ,IAAAA,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CACAI,YAAA,CAAoC;AACnCC,MAAAA,IAAA,EAAM,UAAA;MACNC,MAAA,EAASC,SAAA,IAAA;QACPA,SAAA,CAAU1B,mBAAmB,CAAC2B,OAAO,EAAA,CAAGC,KAAK,CAAEC,GAAY,IAAA;AACzD,UAAA,IACE,CAACA,GAAA,IACD,OAAOA,GAAA,KAAQ,QAAA,IACf,EAAE,MAAA,IAAUA,GAAG,CAAA,IACfA,GAAA,CAAIC,IAAI,KAAK,iBAAA,EACb;AACAC,YAAAA,OAAA,CAAQC,KAAK,CAAC,0BAAA,EAA4BH,GAAA,CAAA;AAC5C,UAAA;AACF,QAAA,CAAA,CAAA;AACA,QAAA,OAAO,IAAA;AACT,MAAA;AACF,KAAA,CAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OACY,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAR,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;EAEZW,WAAA,GAAeC,OAAe,IAAA;IAC5B,IAAI,CAACrC,IAAI,CAACC,UAAU,CAACqC,SAAS,CAACC,mBAAA,CAAoB;AAAEF,MAAAA;AAAQ,KAAA,CAAA,EAAI;AAC/DG,MAAAA,IAAA,EAAM,IAAI,CAACxC,IAAI,CAACC,UAAU,CAACwC;AAC7B,KAAA,CAAA;AACA,IAAA,IAAI,CAACzC,IAAI,CAACC,UAAU,CAACyC,KAAK,EAAA;EAC5B,CAAA;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,opBAAA,EAoBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAAC,CAAA;QAAAC,EAAA;QAAAC,GAAA;QAAAC,MAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"rdfa-explorer.js","sources":["../../../../src/components/_private/rdfa-visualiser/rdfa-explorer.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { trackedReset } from 'tracked-toolbox';\nimport { keepLatestTask, timeout } from 'ember-concurrency';\nimport t from 'ember-intl/helpers/t';\nimport { not, or } from 'ember-truth-helpers';\nimport AuLoader from '@appuniversum/ember-appuniversum/components/au-loader';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport {\n rdfaInfoPluginKey,\n type RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/index.ts';\nimport { type RdfaInfo } from '#root/plugins/rdfa-info/plugin.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport ResourceInfo from '#root/components/_private/rdfa-visualiser/resource-info.gts';\n\ninterface Sig {\n Args: {\n controller: SayController;\n config: RdfaVisualizerConfig;\n };\n}\n\nexport default class RdfaExplorer extends Component<Sig> {\n get rdfaInfo() {\n return rdfaInfoPluginKey.getState(\n this.args.controller.mainEditorState,\n // We need to set this type as otherwise glint complains about private members of anonymous\n // classes, even though it shouldn't be anonymous...\n ) as RdfaInfo;\n }\n computeMappingsTask = keepLatestTask(async () => {\n const abortController = new AbortController();\n try {\n const maps = await this.rdfaInfo?.computeMappingsAsync(\n abortController.signal,\n );\n this.subjects = Array.from(maps.topLevelSubjects);\n this.isRunning = false;\n await timeout(this.args.config.debounceTime || 1000);\n } finally {\n abortController.abort();\n }\n });\n\n @tracked subjects?: string[];\n @trackedReset<RdfaExplorer, boolean>({\n memo: 'rdfaInfo',\n update: (component) => {\n component.computeMappingsTask.perform().catch((err: unknown) => {\n if (\n !err ||\n typeof err !== 'object' ||\n !('name' in err) ||\n err.name !== 'TaskCancelation'\n ) {\n console.error('Error computing mappings', err);\n }\n });\n return true;\n },\n })\n isRunning = false;\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.isRunning}}\n <AuLoader @hideMessage={{true}}>\n {{t \"ember-rdfa-editor.utils.loading\"}}\n </AuLoader>\n {{/if}}\n {{! TODO Keeping it open is nicer user experience, but maybe we can have a similar exp by storing a list of 'expanded' states for resources}}\n {{#if (or @config.keepOpen (not this.isRunning))}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.subjects as |subject|}}\n <ResourceInfo\n @wrapper={{Item}}\n @controller={{@controller}}\n @subject={{subject}}\n @isTopLevel={{true}}\n @displayConfig={{@config.displayConfig}}\n />\n {{/each}}\n </AuList>\n {{/if}}\n </template>\n}\n"],"names":["RdfaExplorer","Component","rdfaInfo","rdfaInfoPluginKey","getState","args","controller","mainEditorState","computeMappingsTask","_buildTask","context","generator","abortController","AbortController","maps","computeMappingsAsync","signal","subjects","Array","from","topLevelSubjects","isRunning","timeout","config","debounceTime","abort","g","prototype","tracked","i","trackedReset","memo","update","component","perform","catch","err","name","console","error","goToSubject","subject","doCommand","selectNodeBySubject","view","mainEditorView","focus","setComponentTemplate","precompileTemplate","strictMode","scope","AuLoader","t","or","not","AuList","ResourceInfo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBe,MAAMA,qBAAqBC,SAAA,CAAU;EAClD,IAAIC,QAAAA,GAAW;IACb,OAAOC,iBAAA,CAAkBC,QAAQ,CAC/B,IAAI,CAACC,IAAI,CAACC,UAAU,CAACC,eAAe,CAAA;AAIxC,EAAA;AACAC,EAAAA,mBAAA,GAAAC,SAAA,CAAA,OAAA;IAAAC,OAAA,EAAA,IAAA;IAAAC,SAAA,EAAA,aAAqC;AACnC,MAAA,MAAMC,kBAAkB,IAAIC,eAAA,EAAA;MAC5B,IAAI;QACF,MAAMC,IAAA,GAAA,MAAa,IAAI,CAACZ,QAAQ,EAAEa,oBAAA,CAChCH,gBAAgBI,MAAM,CAAA;QAExB,IAAI,CAACC,QAAQ,GAAGC,MAAMC,IAAI,CAACL,KAAKM,gBAAgB,CAAA;QAChD,IAAI,CAACC,SAAS,GAAG,KAAA;QACjB,MAAMC,OAAA,CAAQ,IAAI,CAACjB,IAAI,CAACkB,MAAM,CAACC,YAAY,IAAI,IAAA,CAAA;AACjD,MAAA,CAAA,SAAU;QACRZ,eAAA,CAAgBa,KAAK,EAAA;AACvB,MAAA;AACF,IAAA;AAAA,GAAA,CAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,YAAA,CAAA;AAAG,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAEFC,OAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CACAG,YAAA,CAAoC;AACnCC,MAAAA,IAAA,EAAM,UAAA;MACNC,MAAA,EAASC,SAAA,IAAA;QACPA,SAAA,CAAUzB,mBAAmB,CAAC0B,OAAO,EAAA,CAAGC,KAAK,CAAEC,GAAY,IAAA;AACzD,UAAA,IACE,CAACA,GAAA,IACD,OAAOA,GAAA,KAAQ,QAAA,IACf,EAAE,MAAA,IAAUA,GAAG,CAAA,IACfA,GAAA,CAAIC,IAAI,KAAK,iBAAA,EACb;AACAC,YAAAA,OAAA,CAAQC,KAAK,CAAC,0BAAA,EAA4BH,GAAA,CAAA;AAC5C,UAAA;AACF,QAAA,CAAA,CAAA;AACA,QAAA,OAAO,IAAA;AACT,MAAA;AACF,KAAA,CAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OACY,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAP,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;EAEZW,WAAA,GAAeC,OAAe,IAAA;IAC5B,IAAI,CAACpC,IAAI,CAACC,UAAU,CAACoC,SAAS,CAACC,mBAAA,CAAoB;AAAEF,MAAAA;AAAQ,KAAA,CAAA,EAAI;AAC/DG,MAAAA,IAAA,EAAM,IAAI,CAACvC,IAAI,CAACC,UAAU,CAACuC;AAC7B,KAAA,CAAA;AACA,IAAA,IAAI,CAACxC,IAAI,CAACC,UAAU,CAACwC,KAAK,EAAA;EAC5B,CAAA;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,opBAAA,EAoBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAAC,CAAA;QAAAC,EAAA;QAAAC,GAAA;QAAAC,MAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -14,7 +14,7 @@ import 'uuid';
14
14
  import '../../../utils/_private/constants.js';
15
15
  import 'relative-to-absolute-iri';
16
16
  import 'rdf-data-factory';
17
- import '../../../main-CBbqRlCI.js';
17
+ import '../../../main-dUbkrxFL.js';
18
18
  import '../../../core/say-data-factory/data-factory.js';
19
19
  import '../../../core/say-data-factory/default-graph.js';
20
20
  import '../../../config/rdfa.js';
@@ -1 +1 @@
1
- {"version":3,"file":"resource-info.js","sources":["../../../../src/components/_private/rdfa-visualiser/resource-info.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { localCopy } from 'tracked-toolbox';\nimport { eq, or } from 'ember-truth-helpers';\nimport { type PNode } from '#root/prosemirror-aliases.ts';\nimport { ChevronUpIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-up';\nimport { ChevronRightIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-right';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport { getNodesBySubject } from '#root/utils/rdfa-utils.ts';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport { type OutgoingTriple } from '#root/core/rdfa-processor.ts';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport type {\n DisplayGenerator,\n GeneratorContext,\n RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/types.ts';\nimport { get } from '@ember/helper';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\nconst Div: TemplateOnlyComponent<{\n Element: HTMLDivElement;\n Blocks: { default: [] };\n}> = <template>\n <div ...attributes>{{yield}}</div>\n</template>;\n\nconst backupResourceDisplay: DisplayGenerator<PNode> = (node) => {\n const subject = node.attrs['subject'] as string;\n return [subject];\n};\n\nconst ResourceNodeWrapper: TOC<{\n Element: HTMLElement;\n Args: {\n expanded?: boolean;\n onToggle: (event: MouseEvent) => void;\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n Blocks: { default: [] };\n}> = <template>\n {{#if @wrapper}}\n <@wrapper>\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n </@wrapper>\n {{else}}\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n {{/if}}\n</template>;\n\nexport interface ResourceInfoSig {\n Args: {\n controller: SayController;\n subject: string;\n isTopLevel: boolean;\n // In theory this could be used for optimisation but currently it is not...\n node?: PNode;\n expanded?: boolean;\n displayConfig: RdfaVisualizerConfig['displayConfig'];\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n}\n\nexport default class ResourceInfo extends Component<ResourceInfoSig> {\n @localCopy('args.expanded') expanded = false;\n\n get node(): PNode | undefined {\n return (\n this.args.node ??\n getNodesBySubject(\n this.args.controller.mainEditorState,\n this.args.subject,\n )[0]?.value\n );\n }\n get nodeProps() {\n return (this.node?.attrs['properties'] as OutgoingTriple[]) ?? [];\n }\n\n generatorContext = (isTopLevel: boolean): GeneratorContext => ({\n controller: this.args.controller,\n isTopLevel,\n });\n\n toggleExpanded = () => {\n this.expanded = !this.expanded;\n };\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.node}}\n <ConfigurableRdfaDisplay\n @value={{this.node}}\n @generator={{or @displayConfig.ResourceNode backupResourceDisplay}}\n @context={{this.generatorContext @isTopLevel}}\n @wrapper={{component\n ResourceNodeWrapper\n expanded=this.expanded\n onToggle=this.toggleExpanded\n wrapper=@wrapper\n }}\n >\n <AuButton\n @hideText={{true}}\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.goToSubject @subject)}}\n >\n Go to subject\n </AuButton>\n {{#if this.expanded}}\n <AuList class=\"au-u-margin-left\" @divider={{true}} as |Item|>\n {{#each this.nodeProps as |prop|}}\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{or @displayConfig.predicate predicateDisplay}}\n @context={{this.generatorContext false}}\n @wrapper={{Item}}\n >\n {{#if (eq prop.object.termType \"ResourceNode\")}}\n <ResourceInfo\n @controller={{@controller}}\n @subject={{prop.object.value}}\n @isTopLevel={{false}}\n @displayConfig={{@displayConfig}}\n />\n {{else if (get @displayConfig prop.object.termType)}}\n <ConfigurableRdfaDisplay\n @wrapper={{Div}}\n @value={{prop}}\n {{! @glint-expect-error }}\n @generator={{get @displayConfig prop.object.termType}}\n @context={{this.generatorContext false}}\n />\n {{else}}\n <PropertyDetails @prop={{prop}} @controller={{@controller}} />\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n <p class=\"au-u-muted\">No properties</p>\n {{/each}}\n </AuList>\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n {{#if @wrapper}}\n <@wrapper>\n <div>\n {{@subject}}\n </div>\n </@wrapper>\n {{else}}\n <div>\n {{@subject}}\n </div>\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["Div","setComponentTemplate","precompileTemplate","strictMode","templateOnly","backupResourceDisplay","node","subject","attrs","ResourceNodeWrapper","scope","AuButton","ChevronUpIcon","ChevronRightIcon","on","ResourceInfo","Component","g","prototype","localCopy","i","void 0","args","getNodesBySubject","controller","mainEditorState","value","nodeProps","generatorContext","isTopLevel","toggleExpanded","expanded","goToSubject","doCommand","selectNodeBySubject","view","mainEditorView","focus","ConfigurableRdfaDisplay","or","ExternalLinkIcon","fn","AuList","predicateDisplay","eq","get","PropertyDetails"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAMA,GAGD,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,0CAAA,EAEL;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;AAEV,MAAMC,qBAAwC,GAAUC,IAAA,IAAA;AACtD,EAAA,MAAMC,UAAUD,IAAA,CAAKE,KAAK,CAAC,SAAA,CAAoB;EAC/C,OAAO,CAACD,OAAA,CAAQ;AAClB,CAAA;AAEA,MAAME,mBAQD,GAAAR,oBAAA,CAAAC,kBAAA,CAAA,gfAAA,EAwBL;EAAAC,UAAA,EAAA,IAAA;AAAAO,EAAAA,KAAA,EAAAA,OAAA;IAAAC,QAAA;IAAAC,aAAA;IAAAC,gBAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAV,YAAA,EAAA,CAAA;AAeK,MAAMW,qBAAqBC,SAAA,CAAU;AAAA,EAAA;AAAAC,IAAAA,CAAA,MAAAC,SAAA,EAAA,UAAA,EAAA,CACjDC,SAAA,CAAU,eAAA,CAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAA4B,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;EAEvC,IAAIf,IAAAA,GAA0B;IAC5B,OACE,IAAI,CAACgB,IAAI,CAAChB,IAAI,IACdiB,iBAAA,CACE,IAAI,CAACD,IAAI,CAACE,UAAU,CAACC,eAAe,EACpC,IAAI,CAACH,IAAI,CAACf,OAAO,CAClB,CAAC,CAAA,CAAE,EAAEmB,KACR;AACF,EAAA;EACA,IAAIC,SAAAA,GAAY;IACd,OAAQ,IAAI,CAACrB,IAAI,EAAEE,KAAK,CAAC,YAAA,CAAa,IAAyB,EAAE;AACnE,EAAA;EAEAoB,gBAAA,GAAoBC,UAAmB,KAAwB;AAC7DL,IAAAA,UAAA,EAAY,IAAI,CAACF,IAAI,CAACE,UAAU;AAChCK,IAAAA;AACF,GAAC,CAAA;EAEDC,cAAA,GAAiBA,MAAA;AACf,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;EAChC,CAAA;EAEAC,WAAA,GAAezB,OAAe,IAAA;IAC5B,IAAI,CAACe,IAAI,CAACE,UAAU,CAACS,SAAS,CAACC,mBAAA,CAAoB;AAAE3B,MAAAA;AAAQ,KAAA,CAAA,EAAI;AAC/D4B,MAAAA,IAAA,EAAM,IAAI,CAACb,IAAI,CAACE,UAAU,CAACY;AAC7B,KAAA,CAAA;AACA,IAAA,IAAI,CAACd,IAAI,CAACE,UAAU,CAACa,KAAK,EAAA;EAC5B,CAAA;AAEA,EAAA;IAAApC,oBAAA,CAAAC,kBAAA,CAAA,42DAAA,EAoEA;MAAAC,UAAA,EAAA,IAAA;AAAAO,MAAAA,KAAA,EAAAA,OAAA;QAAA4B,uBAAA;QAAAC,EAAA;QAAAlC,qBAAA;QAAAI,mBAAA;QAAAE,QAAA;QAAA6B,gBAAA;QAAA1B,EAAA;QAAA2B,EAAA;QAAAC,MAAA;QAAAC,gBAAA;QAAAC,EAAA;QAAA7B,YAAA;QAAA8B,GAAA;QAAA7C,GAAA;AAAA8C,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"resource-info.js","sources":["../../../../src/components/_private/rdfa-visualiser/resource-info.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { localCopy } from 'tracked-toolbox';\nimport { eq, or } from 'ember-truth-helpers';\nimport { type PNode } from '#root/prosemirror-aliases.ts';\nimport { ChevronUpIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-up';\nimport { ChevronRightIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-right';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport { getNodesBySubject } from '#root/utils/rdfa-utils.ts';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport { type OutgoingTriple } from '#root/core/rdfa-processor.ts';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport type {\n DisplayGenerator,\n GeneratorContext,\n RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/types.ts';\nimport { get } from '@ember/helper';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\nconst Div: TemplateOnlyComponent<{\n Element: HTMLDivElement;\n Blocks: { default: [] };\n}> = <template>\n <div ...attributes>{{yield}}</div>\n</template>;\n\nconst backupResourceDisplay: DisplayGenerator<PNode> = (node) => {\n const subject = node.attrs['subject'] as string;\n return [subject];\n};\n\nconst ResourceNodeWrapper: TOC<{\n Element: HTMLElement;\n Args: {\n expanded?: boolean;\n onToggle: (event: MouseEvent) => void;\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n Blocks: { default: [] };\n}> = <template>\n {{#if @wrapper}}\n <@wrapper>\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n </@wrapper>\n {{else}}\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n {{/if}}\n</template>;\n\nexport interface ResourceInfoSig {\n Args: {\n controller: SayController;\n subject: string;\n isTopLevel: boolean;\n // In theory this could be used for optimisation but currently it is not...\n node?: PNode;\n expanded?: boolean;\n displayConfig: RdfaVisualizerConfig['displayConfig'];\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n}\n\nexport default class ResourceInfo extends Component<ResourceInfoSig> {\n @localCopy('args.expanded') expanded = false;\n\n get node(): PNode | undefined {\n return (\n this.args.node ??\n getNodesBySubject(\n this.args.controller.mainEditorState,\n this.args.subject,\n )[0]?.value\n );\n }\n get nodeProps() {\n return (this.node?.attrs['properties'] as OutgoingTriple[]) ?? [];\n }\n\n generatorContext = (isTopLevel: boolean): GeneratorContext => ({\n controller: this.args.controller,\n isTopLevel,\n });\n\n toggleExpanded = () => {\n this.expanded = !this.expanded;\n };\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.node}}\n <ConfigurableRdfaDisplay\n @value={{this.node}}\n @generator={{or @displayConfig.ResourceNode backupResourceDisplay}}\n @context={{this.generatorContext @isTopLevel}}\n @wrapper={{component\n ResourceNodeWrapper\n expanded=this.expanded\n onToggle=this.toggleExpanded\n wrapper=@wrapper\n }}\n >\n <AuButton\n @hideText={{true}}\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.goToSubject @subject)}}\n >\n Go to subject\n </AuButton>\n {{#if this.expanded}}\n <AuList class=\"au-u-margin-left\" @divider={{true}} as |Item|>\n {{#each this.nodeProps as |prop|}}\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{or @displayConfig.predicate predicateDisplay}}\n @context={{this.generatorContext false}}\n @wrapper={{Item}}\n >\n {{#if (eq prop.object.termType \"ResourceNode\")}}\n <ResourceInfo\n @controller={{@controller}}\n @subject={{prop.object.value}}\n @isTopLevel={{false}}\n @displayConfig={{@displayConfig}}\n />\n {{else if (get @displayConfig prop.object.termType)}}\n <ConfigurableRdfaDisplay\n @wrapper={{Div}}\n @value={{prop}}\n {{! @glint-expect-error }}\n @generator={{get @displayConfig prop.object.termType}}\n @context={{this.generatorContext false}}\n />\n {{else}}\n <PropertyDetails @prop={{prop}} @controller={{@controller}} />\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n <p class=\"au-u-muted\">No properties</p>\n {{/each}}\n </AuList>\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n {{#if @wrapper}}\n <@wrapper>\n <div>\n {{@subject}}\n </div>\n </@wrapper>\n {{else}}\n <div>\n {{@subject}}\n </div>\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["Div","setComponentTemplate","precompileTemplate","strictMode","templateOnly","backupResourceDisplay","node","subject","attrs","ResourceNodeWrapper","scope","AuButton","ChevronUpIcon","ChevronRightIcon","on","ResourceInfo","Component","g","prototype","localCopy","i","args","getNodesBySubject","controller","mainEditorState","value","nodeProps","generatorContext","isTopLevel","toggleExpanded","expanded","goToSubject","doCommand","selectNodeBySubject","view","mainEditorView","focus","ConfigurableRdfaDisplay","or","ExternalLinkIcon","fn","AuList","predicateDisplay","eq","get","PropertyDetails"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAMA,GAGD,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,0CAAA,EAEL;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;AAEV,MAAMC,qBAAwC,GAAUC,IAAA,IAAA;AACtD,EAAA,MAAMC,UAAUD,IAAA,CAAKE,KAAK,CAAC,SAAA,CAAoB;EAC/C,OAAO,CAACD,OAAA,CAAQ;AAClB,CAAA;AAEA,MAAME,mBAQD,GAAAR,oBAAA,CAAAC,kBAAA,CAAA,gfAAA,EAwBL;EAAAC,UAAA,EAAA,IAAA;AAAAO,EAAAA,KAAA,EAAAA,OAAA;IAAAC,QAAA;IAAAC,aAAA;IAAAC,gBAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAV,YAAA,EAAA,CAAA;AAeK,MAAMW,qBAAqBC,SAAA,CAAU;AAAA,EAAA;AAAAC,IAAAA,CAAA,MAAAC,SAAA,EAAA,UAAA,EAAA,CACjDC,SAAA,CAAU,eAAA,CAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAA4B,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAEvC,IAAId,IAAAA,GAA0B;IAC5B,OACE,IAAI,CAACe,IAAI,CAACf,IAAI,IACdgB,iBAAA,CACE,IAAI,CAACD,IAAI,CAACE,UAAU,CAACC,eAAe,EACpC,IAAI,CAACH,IAAI,CAACd,OAAO,CAClB,CAAC,CAAA,CAAE,EAAEkB,KACR;AACF,EAAA;EACA,IAAIC,SAAAA,GAAY;IACd,OAAQ,IAAI,CAACpB,IAAI,EAAEE,KAAK,CAAC,YAAA,CAAa,IAAyB,EAAE;AACnE,EAAA;EAEAmB,gBAAA,GAAoBC,UAAmB,KAAwB;AAC7DL,IAAAA,UAAA,EAAY,IAAI,CAACF,IAAI,CAACE,UAAU;AAChCK,IAAAA;AACF,GAAC,CAAA;EAEDC,cAAA,GAAiBA,MAAA;AACf,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;EAChC,CAAA;EAEAC,WAAA,GAAexB,OAAe,IAAA;IAC5B,IAAI,CAACc,IAAI,CAACE,UAAU,CAACS,SAAS,CAACC,mBAAA,CAAoB;AAAE1B,MAAAA;AAAQ,KAAA,CAAA,EAAI;AAC/D2B,MAAAA,IAAA,EAAM,IAAI,CAACb,IAAI,CAACE,UAAU,CAACY;AAC7B,KAAA,CAAA;AACA,IAAA,IAAI,CAACd,IAAI,CAACE,UAAU,CAACa,KAAK,EAAA;EAC5B,CAAA;AAEA,EAAA;IAAAnC,oBAAA,CAAAC,kBAAA,CAAA,42DAAA,EAoEA;MAAAC,UAAA,EAAA,IAAA;AAAAO,MAAAA,KAAA,EAAAA,OAAA;QAAA2B,uBAAA;QAAAC,EAAA;QAAAjC,qBAAA;QAAAI,mBAAA;QAAAE,QAAA;QAAA4B,gBAAA;QAAAzB,EAAA;QAAA0B,EAAA;QAAAC,MAAA;QAAAC,gBAAA;QAAAC,EAAA;QAAA5B,YAAA;QAAA6B,GAAA;QAAA5C,GAAA;AAAA6C,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -5,7 +5,7 @@ import 'uuid';
5
5
  import '../../../utils/_private/constants.js';
6
6
  import 'relative-to-absolute-iri';
7
7
  import 'rdf-data-factory';
8
- import '../../../main-CBbqRlCI.js';
8
+ import '../../../main-dUbkrxFL.js';
9
9
  import '../../../core/say-data-factory/data-factory.js';
10
10
  import '../../../core/say-data-factory/default-graph.js';
11
11
  import '../../../config/rdfa.js';
@@ -26,7 +26,7 @@ class VisualiserCard extends Component {
26
26
  this.args.onToggle?.(this.expanded);
27
27
  };
28
28
  static {
29
- setComponentTemplate(precompileTemplate("\n {{#if @controller}}\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} as |c|>\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n ", {
29
+ setComponentTemplate(precompileTemplate("\n {{#if @controller}}\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} @disableAuContent={{true}} as |c|>\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n ", {
30
30
  strictMode: true,
31
31
  scope: () => ({
32
32
  AuCard,
@@ -1 +1 @@
1
- {"version":3,"file":"visualiser-card.js","sources":["../../../../src/components/_private/rdfa-visualiser/visualiser-card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy } from 'tracked-toolbox';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport type SayController from '#root/core/say-controller.ts';\nimport { type RdfaVisualizerConfig } from '#root/plugins/rdfa-info/types.ts';\nimport RdfaExplorer from './rdfa-explorer.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\n\ninterface Sig {\n Args: {\n controller?: SayController;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n config: RdfaVisualizerConfig;\n };\n}\nexport default class VisualiserCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n <template>\n {{#if @controller}}\n <AuCard\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n as |c|\n >\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n </template>\n}\n"],"names":["VisualiserCard","Component","g","prototype","localCopy","i","void 0","toggleSection","expanded","args","onToggle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","RdfaExplorer"],"mappings":";;;;;;;;;;;;;;;;;;AAgBe,MAAMA,uBAAuBC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CACnDC,UAAU,eAAA,EAAiB,IAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;EAE5BC,aAAA,GAAgBA,MAAA;AACd,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;IAC9B,IAAI,CAACC,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACF,QAAQ,CAAA;EACpC,CAAA;AAEA,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAAA,2dAAA,EAkBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"visualiser-card.js","sources":["../../../../src/components/_private/rdfa-visualiser/visualiser-card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy } from 'tracked-toolbox';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport type SayController from '#root/core/say-controller.ts';\nimport { type RdfaVisualizerConfig } from '#root/plugins/rdfa-info/types.ts';\nimport RdfaExplorer from './rdfa-explorer.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\n\ninterface Sig {\n Args: {\n controller?: SayController;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n config: RdfaVisualizerConfig;\n };\n}\nexport default class VisualiserCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n <template>\n {{#if @controller}}\n <AuCard\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n @disableAuContent={{true}}\n as |c|\n >\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n </template>\n}\n"],"names":["VisualiserCard","Component","g","prototype","localCopy","i","toggleSection","expanded","args","onToggle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","RdfaExplorer"],"mappings":";;;;;;;;;;;;;;;;;;AAgBe,MAAMA,uBAAuBC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CACnDC,UAAU,eAAA,EAAiB,IAAA,CAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAE5BC,aAAA,GAAgBA,MAAA;AACd,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;IAC9B,IAAI,CAACC,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACF,QAAQ,CAAA;EACpC,CAAA;AAEA,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAAA,sfAAA,EAmBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -329,7 +329,7 @@ class RelationshipEditorCard extends Component {
329
329
  }
330
330
  }
331
331
  static {
332
- setComponentTemplate(precompileTemplate("\n {{#if this.isRdfaAwareNode}}\n <AuCard {{this.setUpListeners}} @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} as |c|>\n <c.header>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\">\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Properties</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"property\")}}>\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay @value={{prop}} @generator={{predicateDisplay}} @context={{hash controller=@controller isTopLevel=false}} />\n <PropertyDetails @controller={{@controller}} @prop={{prop}} @setStatusMessage={{this.setStatusMessage}} />\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode prop)}}>\n Edit property\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink prop)}}>\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton {{on \"click\" this.onContentPredicateFormCancel}} @skin=\"link-secondary\">Cancel</AuButton>\n <AuButton type=\"submit\" @icon={{CheckIcon}} form={{formId}} @skin=\"link\">Save</AuButton>\n {{else}}\n <AuButton {{on \"click\" this.startEditingContentPredicate}} @icon={{PencilIcon}} @skin=\"link\">\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm {{!-- @glint-expect-error --}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} id={{formId}} @initialFormData={{this.contentPredicateInitialFormData}} @onSubmit={{this.onContentPredicateFormSubmit}} />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe (this.contentPredicateTextRepr this.contentPredicateProperty)}}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"backlink\")}}>\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <AuButton class=\"au-u-padding-left-none au-u-padding-right-none\" @icon={{ExternalLinkIcon}} @skin=\"link\" title={{backlink.subject.value}} {{on \"click\" (fn this.goToSubject backlink.subject.value)}}>subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode backlink)}}>\n Edit backlink\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}>\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert class=\"au-u-margin-none\" @skin={{this.statusMessage.type}} @closable={{true}} @onClose={{this.closeStatusMessage}}>\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal @title={{this.modalTitle}} @initialData={{this.initialFormData}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} @onSubmit={{this.onFormSubmit}} @onCancel={{this.cancel}} />\n {{/if}}\n ", {
332
+ setComponentTemplate(precompileTemplate("\n {{#if this.isRdfaAwareNode}}\n <AuCard {{this.setUpListeners}} @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} @disableAuContent={{true}} as |c|>\n <c.header>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\">\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Properties</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"property\")}}>\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay @value={{prop}} @generator={{predicateDisplay}} @context={{hash controller=@controller isTopLevel=false}} />\n <PropertyDetails @controller={{@controller}} @prop={{prop}} @setStatusMessage={{this.setStatusMessage}} />\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode prop)}}>\n Edit property\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink prop)}}>\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton {{on \"click\" this.onContentPredicateFormCancel}} @skin=\"link-secondary\">Cancel</AuButton>\n <AuButton type=\"submit\" @icon={{CheckIcon}} form={{formId}} @skin=\"link\">Save</AuButton>\n {{else}}\n <AuButton {{on \"click\" this.startEditingContentPredicate}} @icon={{PencilIcon}} @skin=\"link\">\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm {{!-- @glint-expect-error --}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} id={{formId}} @initialFormData={{this.contentPredicateInitialFormData}} @onSubmit={{this.onContentPredicateFormSubmit}} />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe (this.contentPredicateTextRepr this.contentPredicateProperty)}}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"backlink\")}}>\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <AuButton class=\"au-u-padding-left-none au-u-padding-right-none\" @icon={{ExternalLinkIcon}} @skin=\"link\" title={{backlink.subject.value}} {{on \"click\" (fn this.goToSubject backlink.subject.value)}}>subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode backlink)}}>\n Edit backlink\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}>\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert class=\"au-u-margin-none\" @skin={{this.statusMessage.type}} @closable={{true}} @onClose={{this.closeStatusMessage}}>\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal @title={{this.modalTitle}} @initialData={{this.initialFormData}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} @onSubmit={{this.onFormSubmit}} @onCancel={{this.cancel}} />\n {{/if}}\n ", {
333
333
  strictMode: true,
334
334
  scope: () => ({
335
335
  AuCard,
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../../../src/components/_private/relationship-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy, trackedReset } from 'tracked-toolbox';\nimport { isResourceNode } from '#root/utils/node-utils.ts';\n// import RdfaPropertyEditor from './property-editor/index.gts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-pill';\nimport type SayController from '#root/core/say-controller.ts';\n// import BacklinkEditor from './backlink-editor/index.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport type {\n Direction,\n SubmissionBody,\n} from '#root/components/_private/relationship-editor/types.ts';\nimport { tracked } from 'tracked-built-ins';\nimport {\n addBacklinkToNode,\n removeBacklinkFromNode,\n} from '#root/utils/_private/rdfa-utils.ts';\nimport { isRdfaAttrs, type RdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { removeProperty } from '#root/commands/rdfa-commands/remove-property.ts';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/select-node-by-subject.ts';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport { on } from '@ember/modifier';\nimport { fn, hash } from '@ember/helper';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ThreeDotsIcon } from '@appuniversum/ember-appuniversum/components/icons/three-dots';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport { BinIcon } from '@appuniversum/ember-appuniversum/components/icons/bin';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport type { PNode } from '#root/prosemirror-aliases.ts';\nimport type {\n PropertyOrBacklink,\n Status,\n StatusMessage,\n} from '../common/types.ts';\nimport {\n languageOrDataType,\n sayDataFactory,\n} from '#root/core/say-data-factory/data-factory.ts';\nimport type { FormData } from './modals/dev-mode.gts';\nimport { modifier } from 'ember-modifier';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport ContentPredicateForm, {\n type SubmissionBody as ContentPredicateFormSubmissionBody,\n} from './content-predicate-form.gts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport type { ContentLiteralTerm } from '#root/core/say-data-factory/index.js';\nimport type { OutgoingTriple } from '#root/core/rdfa-processor.js';\nimport { htmlSafe } from '@ember/template';\nimport { CheckIcon } from '@appuniversum/ember-appuniversum/components/icons/check';\n\ninterface StatusMessageForNode extends StatusMessage {\n node: PNode;\n}\n\ntype Args = {\n controller: SayController;\n node: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n optionGeneratorConfig?: OptionGeneratorConfig;\n};\nexport default class RelationshipEditorCard extends Component<Args> {\n @tracked _statusMessage: StatusMessageForNode | null = null;\n @tracked status?: Status;\n @tracked initialFormData?: FormData;\n @trackedReset('args.node') editingContentPredicate: boolean = false;\n\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'b':\n case 'B':\n this.startCreationMode('backlink');\n break;\n case 'p':\n case 'P':\n if (this.isResourceNode) {\n this.startCreationMode('property');\n }\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n get node() {\n return this.args.node.value;\n }\n\n get isRdfaAwareNode() {\n return isRdfaAttrs(this.node.attrs);\n }\n\n get nodeAttrs() {\n return this.node.attrs as RdfaAttrs;\n }\n\n get isCreating() {\n return this.status?.mode === 'creation';\n }\n\n get isUpdating() {\n return this.status?.mode === 'update';\n }\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n startCreationMode = (direction: Direction) => {\n this.initialFormData = {\n direction,\n };\n this.status = {\n mode: 'creation',\n };\n };\n\n startUpdateMode = (propertyOrBacklink: PropertyOrBacklink) => {\n if ('subject' in propertyOrBacklink) {\n this.initialFormData = {\n direction: 'backlink',\n predicate: {\n direction: 'backlink',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n term: propertyOrBacklink.subject,\n },\n };\n } else {\n this.initialFormData = {\n direction: 'property',\n predicate: {\n direction: 'property',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n // @ts-expect-error remove blanknode from possible object types\n term: propertyOrBacklink.object,\n },\n };\n }\n this.status = {\n mode: 'update',\n propertyOrBacklink,\n };\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (this.status?.mode === 'update') {\n this.removePropertyOrBacklink(this.status.propertyOrBacklink);\n }\n const node = this.args.node;\n const { predicate, target } = body;\n\n if (predicate.direction === 'property') {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.status = undefined;\n };\n\n cancel = () => {\n this.status = undefined;\n };\n\n get contentPredicateProperty() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return this.nodeAttrs.properties.find(\n (prop) => prop.object.termType === 'ContentLiteral',\n );\n } else {\n return;\n }\n }\n\n contentPredicateTextRepr = (contentPredicateProperty: OutgoingTriple) => {\n const predicate = contentPredicateProperty.predicate;\n const object = contentPredicateProperty.object as ContentLiteralTerm;\n const languageSuffix = object.language ? `@${object.language}` : '';\n const datatypeSuffix = object.datatype\n ? `^^\"${object.datatype.value}\"`\n : '';\n return `<strong>${predicate}</strong>${languageSuffix}${datatypeSuffix}`;\n };\n\n get contentPredicateInitialFormData() {\n const predicate = this.contentPredicateProperty?.predicate;\n const object = this.contentPredicateProperty?.object as\n | ContentLiteralTerm\n | undefined;\n return {\n contentPredicate: predicate,\n language: object?.language,\n datatype: object?.datatype.value,\n };\n }\n\n startEditingContentPredicate = () => {\n this.editingContentPredicate = true;\n };\n\n onContentPredicateFormCancel = () => {\n this.editingContentPredicate = false;\n };\n\n onContentPredicateFormSubmit = (body: ContentPredicateFormSubmissionBody) => {\n this.editingContentPredicate = false;\n if (this.contentPredicateProperty) {\n this.removePropertyOrBacklink(this.contentPredicateProperty);\n }\n if (body.contentPredicate) {\n const property = {\n predicate: body.contentPredicate,\n object: sayDataFactory.contentLiteral(\n languageOrDataType(\n body.language,\n body.datatype ? sayDataFactory.namedNode(body.datatype) : undefined,\n ),\n ),\n };\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n this.controller.doCommand(\n addProperty({\n resource,\n property,\n }),\n );\n }\n };\n\n removePropertyOrBacklink = (propertyOrBacklink: PropertyOrBacklink) => {\n // This function can only be called when the selected node defines a resource or the selected\n // node is a document that imports resources (e.g. a snippet)\n if ('subject' in propertyOrBacklink) {\n const backlinkIndex =\n this.nodeAttrs.backlinks.indexOf(propertyOrBacklink);\n if (backlinkIndex === -1) {\n return;\n }\n this.controller.withTransaction(\n () => {\n return removeBacklinkFromNode({\n rdfaId: this.args.node.value.attrs['__rdfaId'] as string,\n index: backlinkIndex,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n } else {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const propertyToRemove = { resource, property: propertyOrBacklink };\n this.controller?.doCommand(removeProperty(propertyToRemove), {\n view: this.controller.mainEditorView,\n });\n }\n };\n\n get isResourceNode() {\n return isResourceNode(this.args.node.value);\n }\n\n get type() {\n if (this.args.node.value.type === this.controller?.schema.nodes['doc']) {\n return 'document';\n }\n return this.isResourceNode ? 'resource' : 'literal';\n }\n\n get controller() {\n return this.args.controller;\n }\n\n goToSubject = (subject: string) => {\n const succesful = this.controller.doCommand(\n selectNodeBySubject({ subject }),\n {\n view: this.controller.mainEditorView,\n },\n );\n if (!succesful) {\n this.setStatusMessage({\n type: 'info',\n message: `Node with subject ${subject} not found`,\n });\n }\n this.controller.focus();\n };\n\n get modalTitle() {\n if (this.status?.mode === 'update') {\n return 'Edit relationship';\n } else {\n return 'Add relationship';\n }\n }\n\n get properties() {\n return this.nodeAttrs.rdfaNodeType === 'resource'\n ? this.nodeAttrs.properties.filter(\n (prop) => prop.object.termType !== 'ContentLiteral',\n )\n : undefined;\n }\n\n get backlinks() {\n return this.nodeAttrs.backlinks;\n }\n\n get statusMessage(): StatusMessage | null {\n // show only if a message is relevant for the current node\n if (this._statusMessage && this.node === this._statusMessage.node) {\n return this._statusMessage;\n }\n return null;\n }\n\n setStatusMessage = (val: StatusMessage | null) => {\n if (val) {\n this._statusMessage = { ...val, node: this.node };\n } else {\n this._statusMessage = val;\n }\n };\n\n closeStatusMessage = () => {\n this.setStatusMessage(null);\n };\n\n get currentTerm() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(this.nodeAttrs.subject);\n } else {\n return sayDataFactory.literalNode(this.nodeAttrs.__rdfaId);\n }\n }\n\n <template>\n {{#if this.isRdfaAwareNode}}\n <AuCard\n {{this.setUpListeners}}\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n as |c|\n >\n <c.header>\n <div\n class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\"\n >\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Properties</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"property\")}}\n >\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{predicateDisplay}}\n @context={{hash\n controller=@controller\n isTopLevel=false\n }}\n />\n <PropertyDetails\n @controller={{@controller}}\n @prop={{prop}}\n @setStatusMessage={{this.setStatusMessage}}\n />\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode prop)}}\n >\n Edit property\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink prop)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton\n {{on \"click\" this.onContentPredicateFormCancel}}\n @skin=\"link-secondary\"\n >Cancel</AuButton>\n <AuButton\n type=\"submit\"\n @icon={{CheckIcon}}\n form={{formId}}\n @skin=\"link\"\n >Save</AuButton>\n {{else}}\n <AuButton\n {{on \"click\" this.startEditingContentPredicate}}\n @icon={{PencilIcon}}\n @skin=\"link\"\n >\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm\n {{! @glint-expect-error }}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n id={{formId}}\n @initialFormData={{this.contentPredicateInitialFormData}}\n @onSubmit={{this.onContentPredicateFormSubmit}}\n />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe\n (this.contentPredicateTextRepr\n this.contentPredicateProperty\n )\n }}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"backlink\")}}\n >\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <AuButton\n class=\"au-u-padding-left-none au-u-padding-right-none\"\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n title={{backlink.subject.value}}\n {{on\n \"click\"\n (fn this.goToSubject backlink.subject.value)\n }}\n >subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode backlink)}}\n >\n Edit backlink\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}\n >\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert\n class=\"au-u-margin-none\"\n @skin={{this.statusMessage.type}}\n @closable={{true}}\n @onClose={{this.closeStatusMessage}}\n >\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal\n @title={{this.modalTitle}}\n @initialData={{this.initialFormData}}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.cancel}}\n />\n {{/if}}\n </template>\n}\n"],"names":["RelationshipEditorCard","Component","g","prototype","tracked","i","void 0","trackedReset","localCopy","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","startCreationMode","isResourceNode","window","addEventListener","removeEventListener","node","args","value","isRdfaAwareNode","isRdfaAttrs","attrs","nodeAttrs","isCreating","status","mode","isUpdating","toggleSection","expanded","onToggle","direction","initialFormData","startUpdateMode","propertyOrBacklink","predicate","term","sayDataFactory","namedNode","target","subject","object","onFormSubmit","body","removePropertyOrBacklink","resource","rdfaNodeType","property","controller","doCommand","addProperty","backlink","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","undefined","cancel","contentPredicateProperty","properties","find","prop","termType","contentPredicateTextRepr","languageSuffix","language","datatypeSuffix","datatype","contentPredicateInitialFormData","contentPredicate","startEditingContentPredicate","editingContentPredicate","onContentPredicateFormCancel","onContentPredicateFormSubmit","contentLiteral","languageOrDataType","backlinkIndex","backlinks","indexOf","removeBacklinkFromNode","index","propertyToRemove","removeProperty","type","schema","nodes","goToSubject","succesful","selectNodeBySubject","setStatusMessage","message","focus","modalTitle","filter","statusMessage","_statusMessage","val","closeStatusMessage","currentTerm","resourceNode","literalNode","__rdfaId","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","AuPill","AuToolbar","AuButton","PlusIcon","on","fn","AuList","ConfigurableRdfaDisplay","predicateDisplay","hash","PropertyDetails","AuDropdown","ThreeDotsIcon","PencilIcon","BinIcon","WithUniqueId","CheckIcon","ContentPredicateForm","htmlSafe","ExternalLinkIcon","AuAlert","RelationshipEditorDevModeModal"],"mappings":"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"}
1
+ {"version":3,"file":"card.js","sources":["../../../../src/components/_private/relationship-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy, trackedReset } from 'tracked-toolbox';\nimport { isResourceNode } from '#root/utils/node-utils.ts';\n// import RdfaPropertyEditor from './property-editor/index.gts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-pill';\nimport type SayController from '#root/core/say-controller.ts';\n// import BacklinkEditor from './backlink-editor/index.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport type {\n Direction,\n SubmissionBody,\n} from '#root/components/_private/relationship-editor/types.ts';\nimport { tracked } from 'tracked-built-ins';\nimport {\n addBacklinkToNode,\n removeBacklinkFromNode,\n} from '#root/utils/_private/rdfa-utils.ts';\nimport { isRdfaAttrs, type RdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { removeProperty } from '#root/commands/rdfa-commands/remove-property.ts';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/select-node-by-subject.ts';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport { on } from '@ember/modifier';\nimport { fn, hash } from '@ember/helper';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ThreeDotsIcon } from '@appuniversum/ember-appuniversum/components/icons/three-dots';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport { BinIcon } from '@appuniversum/ember-appuniversum/components/icons/bin';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport type { PNode } from '#root/prosemirror-aliases.ts';\nimport type {\n PropertyOrBacklink,\n Status,\n StatusMessage,\n} from '../common/types.ts';\nimport {\n languageOrDataType,\n sayDataFactory,\n} from '#root/core/say-data-factory/data-factory.ts';\nimport type { FormData } from './modals/dev-mode.gts';\nimport { modifier } from 'ember-modifier';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport ContentPredicateForm, {\n type SubmissionBody as ContentPredicateFormSubmissionBody,\n} from './content-predicate-form.gts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport type { ContentLiteralTerm } from '#root/core/say-data-factory/index.js';\nimport type { OutgoingTriple } from '#root/core/rdfa-processor.js';\nimport { htmlSafe } from '@ember/template';\nimport { CheckIcon } from '@appuniversum/ember-appuniversum/components/icons/check';\n\ninterface StatusMessageForNode extends StatusMessage {\n node: PNode;\n}\n\ntype Args = {\n controller: SayController;\n node: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n optionGeneratorConfig?: OptionGeneratorConfig;\n};\nexport default class RelationshipEditorCard extends Component<Args> {\n @tracked _statusMessage: StatusMessageForNode | null = null;\n @tracked status?: Status;\n @tracked initialFormData?: FormData;\n @trackedReset('args.node') editingContentPredicate: boolean = false;\n\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'b':\n case 'B':\n this.startCreationMode('backlink');\n break;\n case 'p':\n case 'P':\n if (this.isResourceNode) {\n this.startCreationMode('property');\n }\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n get node() {\n return this.args.node.value;\n }\n\n get isRdfaAwareNode() {\n return isRdfaAttrs(this.node.attrs);\n }\n\n get nodeAttrs() {\n return this.node.attrs as RdfaAttrs;\n }\n\n get isCreating() {\n return this.status?.mode === 'creation';\n }\n\n get isUpdating() {\n return this.status?.mode === 'update';\n }\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n startCreationMode = (direction: Direction) => {\n this.initialFormData = {\n direction,\n };\n this.status = {\n mode: 'creation',\n };\n };\n\n startUpdateMode = (propertyOrBacklink: PropertyOrBacklink) => {\n if ('subject' in propertyOrBacklink) {\n this.initialFormData = {\n direction: 'backlink',\n predicate: {\n direction: 'backlink',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n term: propertyOrBacklink.subject,\n },\n };\n } else {\n this.initialFormData = {\n direction: 'property',\n predicate: {\n direction: 'property',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n // @ts-expect-error remove blanknode from possible object types\n term: propertyOrBacklink.object,\n },\n };\n }\n this.status = {\n mode: 'update',\n propertyOrBacklink,\n };\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (this.status?.mode === 'update') {\n this.removePropertyOrBacklink(this.status.propertyOrBacklink);\n }\n const node = this.args.node;\n const { predicate, target } = body;\n\n if (predicate.direction === 'property') {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.status = undefined;\n };\n\n cancel = () => {\n this.status = undefined;\n };\n\n get contentPredicateProperty() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return this.nodeAttrs.properties.find(\n (prop) => prop.object.termType === 'ContentLiteral',\n );\n } else {\n return;\n }\n }\n\n contentPredicateTextRepr = (contentPredicateProperty: OutgoingTriple) => {\n const predicate = contentPredicateProperty.predicate;\n const object = contentPredicateProperty.object as ContentLiteralTerm;\n const languageSuffix = object.language ? `@${object.language}` : '';\n const datatypeSuffix = object.datatype\n ? `^^\"${object.datatype.value}\"`\n : '';\n return `<strong>${predicate}</strong>${languageSuffix}${datatypeSuffix}`;\n };\n\n get contentPredicateInitialFormData() {\n const predicate = this.contentPredicateProperty?.predicate;\n const object = this.contentPredicateProperty?.object as\n | ContentLiteralTerm\n | undefined;\n return {\n contentPredicate: predicate,\n language: object?.language,\n datatype: object?.datatype.value,\n };\n }\n\n startEditingContentPredicate = () => {\n this.editingContentPredicate = true;\n };\n\n onContentPredicateFormCancel = () => {\n this.editingContentPredicate = false;\n };\n\n onContentPredicateFormSubmit = (body: ContentPredicateFormSubmissionBody) => {\n this.editingContentPredicate = false;\n if (this.contentPredicateProperty) {\n this.removePropertyOrBacklink(this.contentPredicateProperty);\n }\n if (body.contentPredicate) {\n const property = {\n predicate: body.contentPredicate,\n object: sayDataFactory.contentLiteral(\n languageOrDataType(\n body.language,\n body.datatype ? sayDataFactory.namedNode(body.datatype) : undefined,\n ),\n ),\n };\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n this.controller.doCommand(\n addProperty({\n resource,\n property,\n }),\n );\n }\n };\n\n removePropertyOrBacklink = (propertyOrBacklink: PropertyOrBacklink) => {\n // This function can only be called when the selected node defines a resource or the selected\n // node is a document that imports resources (e.g. a snippet)\n if ('subject' in propertyOrBacklink) {\n const backlinkIndex =\n this.nodeAttrs.backlinks.indexOf(propertyOrBacklink);\n if (backlinkIndex === -1) {\n return;\n }\n this.controller.withTransaction(\n () => {\n return removeBacklinkFromNode({\n rdfaId: this.args.node.value.attrs['__rdfaId'] as string,\n index: backlinkIndex,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n } else {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const propertyToRemove = { resource, property: propertyOrBacklink };\n this.controller?.doCommand(removeProperty(propertyToRemove), {\n view: this.controller.mainEditorView,\n });\n }\n };\n\n get isResourceNode() {\n return isResourceNode(this.args.node.value);\n }\n\n get type() {\n if (this.args.node.value.type === this.controller?.schema.nodes['doc']) {\n return 'document';\n }\n return this.isResourceNode ? 'resource' : 'literal';\n }\n\n get controller() {\n return this.args.controller;\n }\n\n goToSubject = (subject: string) => {\n const succesful = this.controller.doCommand(\n selectNodeBySubject({ subject }),\n {\n view: this.controller.mainEditorView,\n },\n );\n if (!succesful) {\n this.setStatusMessage({\n type: 'info',\n message: `Node with subject ${subject} not found`,\n });\n }\n this.controller.focus();\n };\n\n get modalTitle() {\n if (this.status?.mode === 'update') {\n return 'Edit relationship';\n } else {\n return 'Add relationship';\n }\n }\n\n get properties() {\n return this.nodeAttrs.rdfaNodeType === 'resource'\n ? this.nodeAttrs.properties.filter(\n (prop) => prop.object.termType !== 'ContentLiteral',\n )\n : undefined;\n }\n\n get backlinks() {\n return this.nodeAttrs.backlinks;\n }\n\n get statusMessage(): StatusMessage | null {\n // show only if a message is relevant for the current node\n if (this._statusMessage && this.node === this._statusMessage.node) {\n return this._statusMessage;\n }\n return null;\n }\n\n setStatusMessage = (val: StatusMessage | null) => {\n if (val) {\n this._statusMessage = { ...val, node: this.node };\n } else {\n this._statusMessage = val;\n }\n };\n\n closeStatusMessage = () => {\n this.setStatusMessage(null);\n };\n\n get currentTerm() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(this.nodeAttrs.subject);\n } else {\n return sayDataFactory.literalNode(this.nodeAttrs.__rdfaId);\n }\n }\n\n <template>\n {{#if this.isRdfaAwareNode}}\n <AuCard\n {{this.setUpListeners}}\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n @disableAuContent={{true}}\n as |c|\n >\n <c.header>\n <div\n class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\"\n >\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Properties</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"property\")}}\n >\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{predicateDisplay}}\n @context={{hash\n controller=@controller\n isTopLevel=false\n }}\n />\n <PropertyDetails\n @controller={{@controller}}\n @prop={{prop}}\n @setStatusMessage={{this.setStatusMessage}}\n />\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode prop)}}\n >\n Edit property\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink prop)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton\n {{on \"click\" this.onContentPredicateFormCancel}}\n @skin=\"link-secondary\"\n >Cancel</AuButton>\n <AuButton\n type=\"submit\"\n @icon={{CheckIcon}}\n form={{formId}}\n @skin=\"link\"\n >Save</AuButton>\n {{else}}\n <AuButton\n {{on \"click\" this.startEditingContentPredicate}}\n @icon={{PencilIcon}}\n @skin=\"link\"\n >\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm\n {{! @glint-expect-error }}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n id={{formId}}\n @initialFormData={{this.contentPredicateInitialFormData}}\n @onSubmit={{this.onContentPredicateFormSubmit}}\n />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe\n (this.contentPredicateTextRepr\n this.contentPredicateProperty\n )\n }}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"backlink\")}}\n >\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <AuButton\n class=\"au-u-padding-left-none au-u-padding-right-none\"\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n title={{backlink.subject.value}}\n {{on\n \"click\"\n (fn this.goToSubject backlink.subject.value)\n }}\n >subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode backlink)}}\n >\n Edit backlink\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}\n >\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert\n class=\"au-u-margin-none\"\n @skin={{this.statusMessage.type}}\n @closable={{true}}\n @onClose={{this.closeStatusMessage}}\n >\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal\n @title={{this.modalTitle}}\n @initialData={{this.initialFormData}}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.cancel}}\n />\n {{/if}}\n </template>\n}\n"],"names":["RelationshipEditorCard","Component","g","prototype","tracked","i","trackedReset","localCopy","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","startCreationMode","isResourceNode","window","addEventListener","removeEventListener","node","args","value","isRdfaAwareNode","isRdfaAttrs","attrs","nodeAttrs","isCreating","status","mode","isUpdating","toggleSection","expanded","onToggle","direction","initialFormData","startUpdateMode","propertyOrBacklink","predicate","term","sayDataFactory","namedNode","target","subject","object","onFormSubmit","body","removePropertyOrBacklink","resource","rdfaNodeType","property","controller","doCommand","addProperty","backlink","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","undefined","cancel","contentPredicateProperty","properties","find","prop","termType","contentPredicateTextRepr","languageSuffix","language","datatypeSuffix","datatype","contentPredicateInitialFormData","contentPredicate","startEditingContentPredicate","editingContentPredicate","onContentPredicateFormCancel","onContentPredicateFormSubmit","contentLiteral","languageOrDataType","backlinkIndex","backlinks","indexOf","removeBacklinkFromNode","index","propertyToRemove","removeProperty","type","schema","nodes","goToSubject","succesful","selectNodeBySubject","setStatusMessage","message","focus","modalTitle","filter","statusMessage","_statusMessage","val","closeStatusMessage","currentTerm","resourceNode","literalNode","__rdfaId","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","AuPill","AuToolbar","AuButton","PlusIcon","on","fn","AuList","ConfigurableRdfaDisplay","predicateDisplay","hash","PropertyDetails","AuDropdown","ThreeDotsIcon","PencilIcon","BinIcon","WithUniqueId","CheckIcon","ContentPredicateForm","htmlSafe","ExternalLinkIcon","AuAlert","RelationshipEditorDevModeModal"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-predicate-form.js","sources":["../../../../src/components/_private/relationship-editor/content-predicate-form.gts"],"sourcesContent":["import type { ResourceNodeTerm } from '#root/core/say-data-factory/index.ts';\nimport { LANG_STRING } from '#root/utils/_private/constants.ts';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { HeadlessForm } from 'ember-headless-form';\nimport { validateYup } from 'ember-headless-form-yup';\nimport { TrackedObject } from 'tracked-built-ins';\nimport { trackedReset } from 'tracked-toolbox';\nimport type { InferType } from 'yup';\nimport * as yup from 'yup';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport { isFullUri, isPrefixedUri } from '@lblod/marawa/rdfa-helpers';\nimport PowerSelectWithCreate from 'ember-power-select-with-create/components/power-select-with-create';\n\nfunction truthy(obj: unknown) {\n return !!obj;\n}\n\nconst formSchema = yup.object({\n contentPredicate: yup.string().optional(),\n datatype: yup.string().optional(),\n language: yup.string().optional(),\n});\n\ntype FormData = InferType<typeof formSchema>;\n\nexport type SubmissionBody = FormData;\n\ntype Signature = {\n Args: {\n source: ResourceNodeTerm<string>;\n optionGeneratorConfig?: OptionGeneratorConfig;\n initialFormData?: FormData;\n onSubmit: (body: SubmissionBody) => unknown;\n };\n Element: HTMLFormElement;\n};\n\nexport default class ContentPredicateForm extends Component<Signature> {\n @trackedReset('args.initialFormData') formData = new TrackedObject(\n this.args.initialFormData ?? {},\n );\n\n handleSubmit = (body: SubmissionBody) => {\n this.args.onSubmit(body);\n };\n\n searchPredicates = async (searchString: string) => {\n const options = await this.args.optionGeneratorConfig?.predicates?.({\n searchString,\n selectedSource: this.args.source,\n direction: 'property',\n });\n return options?.map((option) => option.term.value) ?? [];\n };\n\n isValidPredicate = (term: string) => {\n if (!term) {\n return false;\n }\n const isUri = isFullUri(term) || isPrefixedUri(term);\n return isUri;\n };\n\n buildPowerSelectWithCreateSuggestion = (term: string) => term;\n\n setPredicate = (validationFn: () => void, value?: string) => {\n this.formData.contentPredicate = value;\n validationFn();\n };\n\n setDatatype = (validationFn: () => void, event: Event) => {\n const datatype = (event.target as HTMLInputElement).value;\n this.formData.datatype = datatype;\n validationFn();\n };\n\n setLanguage = (validationFn: () => void, event: Event) => {\n const language = (event.target as HTMLInputElement).value;\n this.formData.language = language;\n this.formData.datatype = LANG_STRING;\n validationFn();\n };\n\n <template>\n <HeadlessForm\n class=\"au-u-flex au-u-flex--column au-u-flex--spaced-tiny\"\n @onSubmit={{this.handleSubmit}}\n @data={{this.formData}}\n @dataMode=\"mutable\"\n @validate={{validateYup formSchema}}\n ...attributes\n as |form|\n >\n <AuFormRow>\n <form.Field @name=\"contentPredicate\" as |field|>\n <AuLabel class=\"au-u-hidden-visually\" for={{field.id}}>\n Content Predicate\n </AuLabel>\n <PowerSelectWithCreate\n id={{field.id}}\n @selected={{field.value}}\n @onChange={{fn this.setPredicate field.triggerValidation}}\n @onCreate={{fn this.setPredicate field.triggerValidation}}\n @showCreateWhen={{this.isValidPredicate}}\n @buildSuggestion={{this.buildPowerSelectWithCreateSuggestion}}\n @allowClear={{true}}\n @options={{this.searchPredicates \"\"}}\n @search={{this.searchPredicates}}\n @searchEnabled={{true}}\n class=\"au-u-1-1\"\n as |option|\n >\n {{option}}\n </PowerSelectWithCreate>\n <field.Errors />\n </form.Field>\n </AuFormRow>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--spaced-tiny\">\n <form.Field @name=\"language\" as |field|>\n <div class=\"au-u-1-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Language</AuLabel>\n <AuInput\n id={{field.id}}\n {{on \"input\" (fn this.setLanguage field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n <form.Field @name=\"datatype\" as |field|>\n <div class=\"au-u-4-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Datatype</AuLabel>\n <AuInput\n id={{field.id}}\n @disabled={{truthy this.formData.language}}\n {{on \"input\" (fn this.setDatatype field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n </div>\n\n </HeadlessForm>\n </template>\n}\n"],"names":["truthy","obj","formSchema","yup","object","contentPredicate","string","optional","datatype","language","ContentPredicateForm","Component","g","prototype","trackedReset","TrackedObject","args","initialFormData","i","void 0","handleSubmit","body","onSubmit","searchPredicates","searchString","options","optionGeneratorConfig","predicates","selectedSource","source","direction","map","option","term","value","isValidPredicate","isUri","isFullUri","isPrefixedUri","buildPowerSelectWithCreateSuggestion","setPredicate","validationFn","formData","setDatatype","event","target","setLanguage","LANG_STRING","setComponentTemplate","precompileTemplate","strictMode","scope","HeadlessForm","validateYup","AuFormRow","AuLabel","PowerSelectWithCreate","fn","AuInput","on"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,SAASA,MAAAA,CAAOC,GAAY,EAAA;EAC1B,OAAO,CAAC,CAACA,GAAA;AACX;AAEA,MAAMC,UAAA,GAAaC,GAAA,CAAIC,MAAM,CAAC;EAC5BC,gBAAA,EAAkBF,GAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;EACvCC,QAAA,EAAUL,GAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;EAC/BE,QAAA,EAAUN,GAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ;AACjC,CAAA,CAAA;AAgBe,MAAMG,6BAA6BC,SAAA,CAAU;AAAA,EAAA;AAAAC,IAAAA,CAAA,MAAAC,SAAA,EAAA,UAAA,EAAA,CACzDC,YAAA,CAAa,sBAAA,CAAA,CAAA,EAAA,YAAA;MAAA,OAAmC,IAAIC,cACnD,IAAI,CAACC,IAAI,CAACC,eAAe,IAAI,EAAC,CAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;EAGhCC,YAAA,GAAgBC,IAAM,IAAA;AACpB,IAAA,IAAI,CAACL,IAAI,CAACM,QAAQ,CAACD,IAAA,CAAA;EACrB,CAAA;EAEAE,gBAAA,GAAmB,MAAOC,YAAoB,IAAA;IAC5C,MAAMC,OAAA,GAAU,MAAM,IAAI,CAACT,IAAI,CAACU,qBAAqB,EAAEC,UAAA,GAAa;MAClEH,YAAA;AACAI,MAAAA,cAAA,EAAgB,IAAI,CAACZ,IAAI,CAACa,MAAM;AAChCC,MAAAA,SAAA,EAAW;AACb,KAAA,CAAA;AACA,IAAA,OAAOL,OAAA,EAASM,IAAKC,MAAA,IAAWA,OAAOC,IAAI,CAACC,KAAK,CAAA,IAAK,EAAE;EAC1D,CAAA;EAEAC,gBAAA,GAAoBF,IAAY,IAAA;IAC9B,IAAI,CAACA,IAAA,EAAM;AACT,MAAA,OAAO,KAAA;AACT,IAAA;IACA,MAAMG,KAAA,GAAQC,SAAA,CAAUJ,IAAA,CAAA,IAASK,aAAA,CAAcL,IAAA,CAAA;AAC/C,IAAA,OAAOG,KAAA;EACT,CAAA;EAEAG,oCAAA,GAAwCN,IAAY,IAAKA,IAAA;AAEzDO,EAAAA,YAAA,GAAeA,CAACC,YAAwB,EAAEP,KAAc,KAAA;AACtD,IAAA,IAAI,CAACQ,QAAQ,CAACrC,gBAAgB,GAAG6B,KAAA;AACjCO,IAAAA,YAAA,EAAA;EACF,CAAA;AAEAE,EAAAA,WAAA,GAAcA,CAACF,YAAwB,EAAEG,KAAO,KAAA;AAC9C,IAAA,MAAMpC,WAAYoC,KAAA,CAAMC,MAAM,CAAsBX,KAAK;AACzD,IAAA,IAAI,CAACQ,QAAQ,CAAClC,QAAQ,GAAGA,QAAA;AACzBiC,IAAAA,YAAA,EAAA;EACF,CAAA;AAEAK,EAAAA,WAAA,GAAcA,CAACL,YAAwB,EAAEG,KAAO,KAAA;AAC9C,IAAA,MAAMnC,WAAYmC,KAAA,CAAMC,MAAM,CAAsBX,KAAK;AACzD,IAAA,IAAI,CAACQ,QAAQ,CAACjC,QAAQ,GAAGA,QAAA;AACzB,IAAA,IAAI,CAACiC,QAAQ,CAAClC,QAAQ,GAAGuC,WAAA;AACzBN,IAAAA,YAAA,EAAA;EACF,CAAA;AAEA,EAAA;IAAAO,oBAAA,CAAAC,kBAAA,CAAA,43DAAA,EAiEA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,YAAA;QAAAC,WAAA;QAAAnD,UAAA;QAAAoD,SAAA;QAAAC,OAAA;QAAAC,qBAAA;QAAAC,EAAA;QAAAC,OAAA;QAAAC,EAAA;AAAA3D,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"content-predicate-form.js","sources":["../../../../src/components/_private/relationship-editor/content-predicate-form.gts"],"sourcesContent":["import type { ResourceNodeTerm } from '#root/core/say-data-factory/index.ts';\nimport { LANG_STRING } from '#root/utils/_private/constants.ts';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { HeadlessForm } from 'ember-headless-form';\nimport { validateYup } from 'ember-headless-form-yup';\nimport { TrackedObject } from 'tracked-built-ins';\nimport { trackedReset } from 'tracked-toolbox';\nimport type { InferType } from 'yup';\nimport * as yup from 'yup';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport { isFullUri, isPrefixedUri } from '@lblod/marawa/rdfa-helpers';\nimport PowerSelectWithCreate from 'ember-power-select-with-create/components/power-select-with-create';\n\nfunction truthy(obj: unknown) {\n return !!obj;\n}\n\nconst formSchema = yup.object({\n contentPredicate: yup.string().optional(),\n datatype: yup.string().optional(),\n language: yup.string().optional(),\n});\n\ntype FormData = InferType<typeof formSchema>;\n\nexport type SubmissionBody = FormData;\n\ntype Signature = {\n Args: {\n source: ResourceNodeTerm<string>;\n optionGeneratorConfig?: OptionGeneratorConfig;\n initialFormData?: FormData;\n onSubmit: (body: SubmissionBody) => unknown;\n };\n Element: HTMLFormElement;\n};\n\nexport default class ContentPredicateForm extends Component<Signature> {\n @trackedReset('args.initialFormData') formData = new TrackedObject(\n this.args.initialFormData ?? {},\n );\n\n handleSubmit = (body: SubmissionBody) => {\n this.args.onSubmit(body);\n };\n\n searchPredicates = async (searchString: string) => {\n const options = await this.args.optionGeneratorConfig?.predicates?.({\n searchString,\n selectedSource: this.args.source,\n direction: 'property',\n });\n return options?.map((option) => option.term.value) ?? [];\n };\n\n isValidPredicate = (term: string) => {\n if (!term) {\n return false;\n }\n const isUri = isFullUri(term) || isPrefixedUri(term);\n return isUri;\n };\n\n buildPowerSelectWithCreateSuggestion = (term: string) => term;\n\n setPredicate = (validationFn: () => void, value?: string) => {\n this.formData.contentPredicate = value;\n validationFn();\n };\n\n setDatatype = (validationFn: () => void, event: Event) => {\n const datatype = (event.target as HTMLInputElement).value;\n this.formData.datatype = datatype;\n validationFn();\n };\n\n setLanguage = (validationFn: () => void, event: Event) => {\n const language = (event.target as HTMLInputElement).value;\n this.formData.language = language;\n this.formData.datatype = LANG_STRING;\n validationFn();\n };\n\n <template>\n <HeadlessForm\n class=\"au-u-flex au-u-flex--column au-u-flex--spaced-tiny\"\n @onSubmit={{this.handleSubmit}}\n @data={{this.formData}}\n @dataMode=\"mutable\"\n @validate={{validateYup formSchema}}\n ...attributes\n as |form|\n >\n <AuFormRow>\n <form.Field @name=\"contentPredicate\" as |field|>\n <AuLabel class=\"au-u-hidden-visually\" for={{field.id}}>\n Content Predicate\n </AuLabel>\n <PowerSelectWithCreate\n id={{field.id}}\n @selected={{field.value}}\n @onChange={{fn this.setPredicate field.triggerValidation}}\n @onCreate={{fn this.setPredicate field.triggerValidation}}\n @showCreateWhen={{this.isValidPredicate}}\n @buildSuggestion={{this.buildPowerSelectWithCreateSuggestion}}\n @allowClear={{true}}\n @options={{this.searchPredicates \"\"}}\n @search={{this.searchPredicates}}\n @searchEnabled={{true}}\n class=\"au-u-1-1\"\n as |option|\n >\n {{option}}\n </PowerSelectWithCreate>\n <field.Errors />\n </form.Field>\n </AuFormRow>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--spaced-tiny\">\n <form.Field @name=\"language\" as |field|>\n <div class=\"au-u-1-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Language</AuLabel>\n <AuInput\n id={{field.id}}\n {{on \"input\" (fn this.setLanguage field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n <form.Field @name=\"datatype\" as |field|>\n <div class=\"au-u-4-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Datatype</AuLabel>\n <AuInput\n id={{field.id}}\n @disabled={{truthy this.formData.language}}\n {{on \"input\" (fn this.setDatatype field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n </div>\n\n </HeadlessForm>\n </template>\n}\n"],"names":["truthy","obj","formSchema","yup","object","contentPredicate","string","optional","datatype","language","ContentPredicateForm","Component","g","prototype","trackedReset","TrackedObject","args","initialFormData","i","handleSubmit","body","onSubmit","searchPredicates","searchString","options","optionGeneratorConfig","predicates","selectedSource","source","direction","map","option","term","value","isValidPredicate","isUri","isFullUri","isPrefixedUri","buildPowerSelectWithCreateSuggestion","setPredicate","validationFn","formData","setDatatype","event","target","setLanguage","LANG_STRING","setComponentTemplate","precompileTemplate","strictMode","scope","HeadlessForm","validateYup","AuFormRow","AuLabel","PowerSelectWithCreate","fn","AuInput","on"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-button.js","sources":["../../../../src/components/_private/relationship-editor/create-button.gts"],"sourcesContent":["import AuButton, {\n type AuButtonSignature,\n} from '@appuniversum/ember-appuniversum/components/au-button';\nimport { AddIcon } from '@appuniversum/ember-appuniversum/components/icons/add';\nimport Component from '@glimmer/component';\nimport { tracked } from 'tracked-built-ins';\nimport { sayDataFactory } from '#root/core/say-data-factory/data-factory.ts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport type SayController from '#root/core/say-controller.ts';\nimport { isRdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { addBacklinkToNode } from '#root/utils/rdfa-utils.ts';\nimport t from 'ember-intl/helpers/t';\nimport { on } from '@ember/modifier';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport type { OptionGeneratorConfig, SubmissionBody } from './types.ts';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport RelationshipEditorClassicModal from './modals/classic.gts';\nimport { and } from 'ember-truth-helpers';\n\ntype CreateRelationshipButtonSig = {\n Element: AuButtonSignature['Element'];\n Args: {\n controller: SayController;\n node?: ResolvedPNode;\n optionGeneratorConfig?: OptionGeneratorConfig;\n devMode?: boolean;\n };\n};\nexport default class CreateRelationshipButton extends Component<CreateRelationshipButtonSig> {\n @tracked modalOpen = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n openModal = () => {\n this.modalOpen = true;\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (!this.node) {\n return;\n }\n const node = this.node;\n const { predicate, target } = body;\n if (predicate.direction === 'property') {\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource: this.node.value.attrs['subject'] as string,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.modalOpen = false;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get selectedNode() {\n const node = this.args.node;\n if (!node || !isRdfaAttrs(node.value.attrs)) {\n return;\n }\n if (node.value.attrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(node.value.attrs.subject);\n } else {\n return sayDataFactory.literalNode(node.value.attrs.__rdfaId);\n }\n }\n\n get isDisabled() {\n return !this.selectedNode;\n }\n\n get ModalComponent() {\n return this.args.devMode\n ? RelationshipEditorDevModeModal\n : RelationshipEditorClassicModal;\n }\n\n <template>\n <AuButton\n @icon={{AddIcon}}\n @disabled={{this.isDisabled}}\n @iconAlignment=\"left\"\n @skin=\"link\"\n {{on \"click\" this.openModal}}\n ...attributes\n >\n {{t \"ember-rdfa-editor.linking-ui-poc.button.label\"}}\n </AuButton>\n {{#if (and this.modalOpen this.selectedNode)}}\n {{#if @devMode}}\n <RelationshipEditorDevModeModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{else}}\n <RelationshipEditorClassicModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{/if}}\n\n {{/if}}\n </template>\n}\n"],"names":["CreateRelationshipButton","Component","g","prototype","tracked","i","void 0","controller","args","node","openModal","modalOpen","onFormSubmit","body","predicate","target","direction","property","term","value","object","doCommand","addProperty","resource","attrs","backlink","subject","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","closeModal","selectedNode","isRdfaAttrs","rdfaNodeType","sayDataFactory","resourceNode","literalNode","__rdfaId","isDisabled","ModalComponent","devMode","RelationshipEditorDevModeModal","RelationshipEditorClassicModal","setComponentTemplate","precompileTemplate","strictMode","scope","AuButton","AddIcon","on","t","and"],"mappings":"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"}
1
+ {"version":3,"file":"create-button.js","sources":["../../../../src/components/_private/relationship-editor/create-button.gts"],"sourcesContent":["import AuButton, {\n type AuButtonSignature,\n} from '@appuniversum/ember-appuniversum/components/au-button';\nimport { AddIcon } from '@appuniversum/ember-appuniversum/components/icons/add';\nimport Component from '@glimmer/component';\nimport { tracked } from 'tracked-built-ins';\nimport { sayDataFactory } from '#root/core/say-data-factory/data-factory.ts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport type SayController from '#root/core/say-controller.ts';\nimport { isRdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { addBacklinkToNode } from '#root/utils/rdfa-utils.ts';\nimport t from 'ember-intl/helpers/t';\nimport { on } from '@ember/modifier';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport type { OptionGeneratorConfig, SubmissionBody } from './types.ts';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport RelationshipEditorClassicModal from './modals/classic.gts';\nimport { and } from 'ember-truth-helpers';\n\ntype CreateRelationshipButtonSig = {\n Element: AuButtonSignature['Element'];\n Args: {\n controller: SayController;\n node?: ResolvedPNode;\n optionGeneratorConfig?: OptionGeneratorConfig;\n devMode?: boolean;\n };\n};\nexport default class CreateRelationshipButton extends Component<CreateRelationshipButtonSig> {\n @tracked modalOpen = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n openModal = () => {\n this.modalOpen = true;\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (!this.node) {\n return;\n }\n const node = this.node;\n const { predicate, target } = body;\n if (predicate.direction === 'property') {\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource: this.node.value.attrs['subject'] as string,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.modalOpen = false;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get selectedNode() {\n const node = this.args.node;\n if (!node || !isRdfaAttrs(node.value.attrs)) {\n return;\n }\n if (node.value.attrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(node.value.attrs.subject);\n } else {\n return sayDataFactory.literalNode(node.value.attrs.__rdfaId);\n }\n }\n\n get isDisabled() {\n return !this.selectedNode;\n }\n\n get ModalComponent() {\n return this.args.devMode\n ? RelationshipEditorDevModeModal\n : RelationshipEditorClassicModal;\n }\n\n <template>\n <AuButton\n @icon={{AddIcon}}\n @disabled={{this.isDisabled}}\n @iconAlignment=\"left\"\n @skin=\"link\"\n {{on \"click\" this.openModal}}\n ...attributes\n >\n {{t \"ember-rdfa-editor.linking-ui-poc.button.label\"}}\n </AuButton>\n {{#if (and this.modalOpen this.selectedNode)}}\n {{#if @devMode}}\n <RelationshipEditorDevModeModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{else}}\n <RelationshipEditorClassicModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{/if}}\n\n {{/if}}\n </template>\n}\n"],"names":["CreateRelationshipButton","Component","g","prototype","tracked","i","controller","args","node","openModal","modalOpen","onFormSubmit","body","predicate","target","direction","property","term","value","object","doCommand","addProperty","resource","attrs","backlink","subject","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","closeModal","selectedNode","isRdfaAttrs","rdfaNodeType","sayDataFactory","resourceNode","literalNode","__rdfaId","isDisabled","ModalComponent","devMode","RelationshipEditorDevModeModal","RelationshipEditorClassicModal","setComponentTemplate","precompileTemplate","strictMode","scope","AuButton","AddIcon","on","t","and"],"mappings":"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"}