@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":"lang-pill.js","sources":["../../../../src/components/_private/doc-editor/lang-pill.ts"],"sourcesContent":["import type SayController from '#root/core/say-controller.ts';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\ntype Args = {\n controller?: SayController;\n supportedLanguages?: string[];\n};\nexport default class DocumentLanguagePill extends Component<Args> {\n @tracked\n modalOpen = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get supportedLanguages() {\n return this.args.supportedLanguages ?? ['nl-BE', 'en-US'];\n }\n\n get lang() {\n return this.controller?.documentLanguage;\n }\n\n showModal = () => {\n this.modalOpen = true;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n setLanguage = (lang: string) => {\n if (this.controller) {\n this.controller.documentLanguage = lang;\n }\n };\n}\n"],"names":["DocumentLanguagePill","Component","g","prototype","tracked","i","void 0","controller","args","supportedLanguages","lang","documentLanguage","showModal","modalOpen","closeModal","setLanguage","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAQe,MAAMA,oBAAoB,SAASC,SAAS,CAAO;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC/DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OACI,KAAK;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;EAEjB,IAAIC,UAAUA,GAAG;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIE,kBAAkBA,GAAG;IACvB,OAAO,IAAI,CAACD,IAAI,CAACC,kBAAkB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3D,EAAA;EAEA,IAAIC,IAAIA,GAAG;AACT,IAAA,OAAO,IAAI,CAACH,UAAU,EAAEI,gBAAgB;AAC1C,EAAA;EAEAC,SAAS,GAAGA,MAAM;IAChB,IAAI,CAACC,SAAS,GAAG,IAAI;EACvB,CAAC;EAEDC,UAAU,GAAGA,MAAM;IACjB,IAAI,CAACD,SAAS,GAAG,KAAK;EACxB,CAAC;EAEDE,WAAW,GAAIL,IAAY,IAAK;IAC9B,IAAI,IAAI,CAACH,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACI,gBAAgB,GAAGD,IAAI;AACzC,IAAA;EACF,CAAC;AACH;AAACM,oBAAA,CAAAC,QAAA,EA7BoBjB,oBAAoB,CAAA;;;;"}
1
+ {"version":3,"file":"lang-pill.js","sources":["../../../../src/components/_private/doc-editor/lang-pill.ts"],"sourcesContent":["import type SayController from '#root/core/say-controller.ts';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\ntype Args = {\n controller?: SayController;\n supportedLanguages?: string[];\n};\nexport default class DocumentLanguagePill extends Component<Args> {\n @tracked\n modalOpen = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get supportedLanguages() {\n return this.args.supportedLanguages ?? ['nl-BE', 'en-US'];\n }\n\n get lang() {\n return this.controller?.documentLanguage;\n }\n\n showModal = () => {\n this.modalOpen = true;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n setLanguage = (lang: string) => {\n if (this.controller) {\n this.controller.documentLanguage = lang;\n }\n };\n}\n"],"names":["DocumentLanguagePill","Component","g","prototype","tracked","i","controller","args","supportedLanguages","lang","documentLanguage","showModal","modalOpen","closeModal","setLanguage","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAQe,MAAMA,oBAAoB,SAASC,SAAS,CAAO;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC/DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OACI,KAAK;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;EAEjB,IAAIC,UAAUA,GAAG;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIE,kBAAkBA,GAAG;IACvB,OAAO,IAAI,CAACD,IAAI,CAACC,kBAAkB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3D,EAAA;EAEA,IAAIC,IAAIA,GAAG;AACT,IAAA,OAAO,IAAI,CAACH,UAAU,EAAEI,gBAAgB;AAC1C,EAAA;EAEAC,SAAS,GAAGA,MAAM;IAChB,IAAI,CAACC,SAAS,GAAG,IAAI;EACvB,CAAC;EAEDC,UAAU,GAAGA,MAAM;IACjB,IAAI,CAACD,SAAS,GAAG,KAAK;EACxB,CAAC;EAEDE,WAAW,GAAIL,IAAY,IAAK;IAC9B,IAAI,IAAI,CAACH,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACI,gBAAgB,GAAGD,IAAI;AACzC,IAAA;EACF,CAAC;AACH;AAACM,oBAAA,CAAAC,QAAA,EA7BoBhB,oBAAoB,CAAA;;;;"}
@@ -223,7 +223,7 @@ class DocImportedResourceEditorCard extends Component {
223
223
  }
224
224
  }
225
225
  static {
226
- setComponentTemplate(precompileTemplate("\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} as |c|>\n <c.header class=\"say-flex-grow\">\n\n <AuToolbar class=\"au-u-flex au-u-flex-row au-u-flex--space-between\" as |Group|>\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">Document imported resources</AuHeading>\n </Group>\n {{#if (truthy this.documentImportedResources)}}\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.openResourceModal}}>\n Add resource\n </AuButton>\n </Group>\n {{/if}}\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if (truthy this.documentImportedResources)}}\n {{#if (not (isObjectEmpty this.importedResourceProperties))}}\n <AuList @divider={{true}} as |IRItem|>\n {{#each-in this.importedResourceProperties as |importedResource props|}}\n <IRItem>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <strong>{{importedResource}}</strong>\n <div>\n <AuButton @skin=\"link\" @icon={{PlusIcon}} role=\"button\" {{on \"click\" (fn this.startPropertyCreation importedResource)}} />\n <AuButton @skin=\"link\" @alert={{true}} @icon={{CrossIcon}} @disabled={{not (isEmpty props)}} role=\"button\" {{on \"click\" (fn this.removeImportedResource importedResource)}} />\n </div>\n </div>\n <AuList @divider={{true}} as |Item|>\n {{#each props 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 {{#if @controller}}\n <ConfigurableRdfaDisplay @value={{prop}} @generator={{predicateDisplay}} @context={{hash controller=@controller isTopLevel=false}} />\n {{/if}}\n <PropertyDetails @controller={{@controller}} @prop={{prop}} />\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startPropertyUpdate importedResource prop)}}>\n Edit property\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removeProperty prop)}}>\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n </IRItem>\n {{/each-in}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any imported\n resources.</p>\n {{/if}}\n {{else}}\n <AuAlert @icon=\"alert-triangle\" @skin=\"warning\">This document does not\n support defining imported resources.</AuAlert>\n {{/if}}\n </c.content>\n </AuCard>\n\n {{!-- Add imported resource modal --}}\n <WithUniqueId as |formId|>\n <AuModal @modalOpen={{this.isResourceModalOpen}} @closable={{true}} @closeModal={{this.closeResourceModal}}>\n <:title>Add Imported Resource</:title>\n <:body>\n <DefineImportedResourceForm id={{formId}} @onSave={{this.addImportedResource}} @onCancel={{this.closeResourceModal}} @controller={{@controller}} />\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton form={{formId}} type=\"submit\">Save</AuButton>\n <AuButton @skin=\"secondary\" {{on \"click\" this.closeResourceModal}}>Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n\n {{#if this.status}}\n <RelationshipEditorDevModeModal @title={{this.modalTitle}} @initialData={{this.initialFormData}} @supportedDirections={{array \"property\"}} {{!-- @glint-expect-error --}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} @onSubmit={{this.onFormSubmit}} @onCancel={{this.closeRelationshipModal}} />\n {{/if}}\n ", {
226
+ setComponentTemplate(precompileTemplate("\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} @disableAuContent={{true}} as |c|>\n <c.header class=\"say-flex-grow\">\n\n <AuToolbar class=\"au-u-flex au-u-flex-row au-u-flex--space-between\" as |Group|>\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">Document imported resources</AuHeading>\n </Group>\n {{#if (truthy this.documentImportedResources)}}\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.openResourceModal}}>\n Add resource\n </AuButton>\n </Group>\n {{/if}}\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if (truthy this.documentImportedResources)}}\n {{#if (not (isObjectEmpty this.importedResourceProperties))}}\n <AuList @divider={{true}} as |IRItem|>\n {{#each-in this.importedResourceProperties as |importedResource props|}}\n <IRItem>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <strong>{{importedResource}}</strong>\n <div>\n <AuButton @skin=\"link\" @icon={{PlusIcon}} role=\"button\" {{on \"click\" (fn this.startPropertyCreation importedResource)}} />\n <AuButton @skin=\"link\" @alert={{true}} @icon={{CrossIcon}} @disabled={{not (isEmpty props)}} role=\"button\" {{on \"click\" (fn this.removeImportedResource importedResource)}} />\n </div>\n </div>\n <AuList @divider={{true}} as |Item|>\n {{#each props 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 {{#if @controller}}\n <ConfigurableRdfaDisplay @value={{prop}} @generator={{predicateDisplay}} @context={{hash controller=@controller isTopLevel=false}} />\n {{/if}}\n <PropertyDetails @controller={{@controller}} @prop={{prop}} />\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startPropertyUpdate importedResource prop)}}>\n Edit property\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removeProperty prop)}}>\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n </IRItem>\n {{/each-in}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any imported\n resources.</p>\n {{/if}}\n {{else}}\n <AuAlert @icon=\"alert-triangle\" @skin=\"warning\">This document does not\n support defining imported resources.</AuAlert>\n {{/if}}\n </c.content>\n </AuCard>\n\n {{!-- Add imported resource modal --}}\n <WithUniqueId as |formId|>\n <AuModal @modalOpen={{this.isResourceModalOpen}} @closable={{true}} @closeModal={{this.closeResourceModal}}>\n <:title>Add Imported Resource</:title>\n <:body>\n <DefineImportedResourceForm id={{formId}} @onSave={{this.addImportedResource}} @onCancel={{this.closeResourceModal}} @controller={{@controller}} />\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton form={{formId}} type=\"submit\">Save</AuButton>\n <AuButton @skin=\"secondary\" {{on \"click\" this.closeResourceModal}}>Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n\n {{#if this.status}}\n <RelationshipEditorDevModeModal @title={{this.modalTitle}} @initialData={{this.initialFormData}} @supportedDirections={{array \"property\"}} {{!-- @glint-expect-error --}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} @onSubmit={{this.onFormSubmit}} @onCancel={{this.closeRelationshipModal}} />\n {{/if}}\n ", {
227
227
  strictMode: true,
228
228
  scope: () => ({
229
229
  AuCard,
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../../../src/components/_private/doc-imported-resource-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { isEmpty, not } from 'ember-truth-helpers';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\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 { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport { CrossIcon } from '@appuniversum/ember-appuniversum/components/icons/cross';\nimport type SayController from '#root/core/say-controller.ts';\nimport {\n addImportedResource,\n removeImportedResource,\n} from '#root/plugins/rdfa-info/imported-resources.ts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport {\n isLinkTriple,\n type OutgoingTriple,\n} from '#root/core/rdfa-processor.ts';\nimport { getSubjectsFromBacklinksOfRelationship } from '#root/utils/rdfa-utils.ts';\nimport { IMPORTED_RESOURCES_ATTR } from '#root/plugins/imported-resources/index.ts';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport { addProperty, removeProperty } from '#root/commands/index.ts';\nimport { deepEqualPropertyList } from '#root/plugins/rdfa-info/utils.ts';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport DefineImportedResourceForm from './form.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport { localCopy } from 'tracked-toolbox';\nimport type { SubmissionBody } from '#root/components/_private/relationship-editor/types.ts';\nimport RelationshipEditorDevModeModal from '../relationship-editor/modals/dev-mode.gts';\nimport { sayDataFactory } from '#root/core/say-data-factory/data-factory.ts';\nimport type { FormData } from '../relationship-editor/modals/dev-mode.gts';\nimport { array } from '@ember/helper';\nimport type { OptionGeneratorConfig } from '../relationship-editor/types.ts';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport { hash } from '@ember/helper';\n\ntype CreationStatus = {\n mode: 'creation';\n subject: string;\n};\ntype UpdateStatus = {\n mode: 'update';\n subject: string;\n property: OutgoingTriple;\n};\n\nexport type Status = CreationStatus | UpdateStatus;\n\ninterface Sig {\n Args: {\n controller: SayController;\n additionalImportedResources?: string[];\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n optionGeneratorConfig?: OptionGeneratorConfig;\n };\n Element: HTMLDivElement;\n}\n\n/** truth-helpers 'not' incorrectly treats [] as falsey */\nfunction truthy(maybe: unknown) {\n return !!maybe;\n}\n\nfunction isObjectEmpty(obj: Record<string, unknown>) {\n return Object.keys(obj).length === 0;\n}\n\nexport default class DocImportedResourceEditorCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n @tracked isResourceModalOpen = false;\n\n openResourceModal = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.isResourceModalOpen = true;\n };\n closeResourceModal = () => (this.isResourceModalOpen = false);\n\n @tracked status?: Status;\n @tracked initialFormData?: FormData;\n closeRelationshipModal = () => (this.status = undefined);\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n get documentNode() {\n return this.args.controller.mainEditorState.doc;\n }\n\n getSubjectPropertyMap(): Record<string, OutgoingTriple[]> {\n const importedResources = this.documentImportedResources;\n const props = this.documentNode.attrs['properties'] as OutgoingTriple[];\n if (!importedResources) return {};\n const propsAndSubjects = props.map((prop) => {\n if (!isLinkTriple(prop)) {\n return [];\n }\n const subjects = getSubjectsFromBacklinksOfRelationship(\n this.documentNode,\n importedResources,\n prop.predicate,\n prop.object,\n );\n return [prop, subjects] as [OutgoingTriple, string[]];\n });\n const mapped: Record<string, OutgoingTriple[]> = Object.fromEntries(\n importedResources.map((imp) => [imp, []]),\n );\n propsAndSubjects.forEach(([prop, subjects]) => {\n subjects?.forEach((subject) => {\n mapped[subject] = (mapped[subject] ?? []).concat(prop);\n });\n });\n return mapped;\n }\n\n // This isn't used to reduce re-calculations, just to re-use arrays when possible\n irCache: Record<string, OutgoingTriple[]> | undefined;\n get importedResourceProperties(): Record<string, OutgoingTriple[]> {\n if (!this.irCache) {\n // eslint-disable-next-line ember/no-side-effects\n this.irCache = {};\n }\n const newMap = this.getSubjectPropertyMap();\n // Re-use cached arrays if there are no changes to avoid re-renders that mess with on-clicks\n // eslint-disable-next-line ember/no-side-effects\n this.irCache = Object.fromEntries(\n Object.entries(newMap).map(([subject, props]) => {\n if (!this.irCache) return [subject, props];\n if (\n this.irCache[subject] &&\n deepEqualPropertyList(this.irCache[subject], props)\n ) {\n return [subject, this.irCache[subject]];\n } else {\n return [subject, props];\n }\n }),\n );\n return this.irCache;\n }\n\n /**\n * False if adding imported resources is not supported here, otherwise truthy, possibly empty\n * array\n */\n get documentImportedResources(): string[] | false {\n const docNodeImportedResources =\n !!this.args.controller?.schema.nodes['doc']?.spec.attrs?.[\n IMPORTED_RESOURCES_ATTR\n ] &&\n ((this.documentNode.attrs[IMPORTED_RESOURCES_ATTR] as string[]) || []);\n return (\n docNodeImportedResources &&\n Array.from(\n new Set<string>([\n ...(docNodeImportedResources || []),\n ...(this.args.additionalImportedResources || []),\n ]).values(),\n )\n );\n }\n\n addImportedResource = (resource: string) => {\n this.args.controller?.withTransaction(() => {\n if (!this.args.controller) return null;\n return addImportedResource({\n resource,\n })(this.args.controller.mainEditorState).transaction;\n });\n this.closeResourceModal();\n };\n removeImportedResource = (resource: string) => {\n this.args.controller?.withTransaction(() => {\n if (!this.args.controller) return null;\n return removeImportedResource({\n resource,\n })(this.args.controller.mainEditorState).transaction;\n });\n };\n startPropertyCreation = (resource: string, event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.initialFormData = {\n direction: 'property',\n };\n this.status = {\n mode: 'creation',\n subject: resource,\n };\n };\n startPropertyUpdate = (resource: string, property: OutgoingTriple) => {\n this.initialFormData = {\n direction: 'property',\n predicate: {\n direction: 'property',\n term: sayDataFactory.namedNode(property.predicate),\n },\n target: {\n // @ts-expect-error remove Blanknode as possible type\n term: property.object,\n },\n };\n this.status = {\n mode: 'update',\n subject: resource,\n property,\n };\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (!this.status) {\n return;\n }\n if (this.status.mode === 'update') {\n this.removeProperty(this.status.property);\n }\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.args.controller.doCommand(\n addProperty({\n resource: this.status.subject,\n // @ts-expect-error fix types\n property,\n }),\n {\n view: this.args.controller.mainEditorView,\n },\n );\n }\n\n this.closeRelationshipModal();\n };\n\n // TODO de-dupe this from property-editor?\n removeProperty = (property: OutgoingTriple) => {\n const propertyToRemove = {\n documentResourceNode: this.documentNode,\n importedResources: this.documentImportedResources || [],\n property,\n };\n this.args.controller?.doCommand(removeProperty(propertyToRemove), {\n view: this.args.controller.mainEditorView,\n });\n };\n\n get currentTerm() {\n return this.status && sayDataFactory.resourceNode(this.status.subject);\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 <template>\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 class=\"say-flex-grow\">\n\n <AuToolbar\n class=\"au-u-flex au-u-flex-row au-u-flex--space-between\"\n as |Group|\n >\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">Document imported resources</AuHeading>\n </Group>\n {{#if (truthy this.documentImportedResources)}}\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.openResourceModal}}>\n Add resource\n </AuButton>\n </Group>\n {{/if}}\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if (truthy this.documentImportedResources)}}\n {{#if (not (isObjectEmpty this.importedResourceProperties))}}\n <AuList @divider={{true}} as |IRItem|>\n {{#each-in\n this.importedResourceProperties\n as |importedResource props|\n }}\n <IRItem>\n <div\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <strong>{{importedResource}}</strong>\n <div>\n <AuButton\n @skin=\"link\"\n @icon={{PlusIcon}}\n role=\"button\"\n {{on\n \"click\"\n (fn this.startPropertyCreation importedResource)\n }}\n />\n <AuButton\n @skin=\"link\"\n @alert={{true}}\n @icon={{CrossIcon}}\n @disabled={{not (isEmpty props)}}\n role=\"button\"\n {{on\n \"click\"\n (fn this.removeImportedResource importedResource)\n }}\n />\n </div>\n </div>\n <AuList @divider={{true}} as |Item|>\n {{#each props 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 {{#if @controller}}\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{predicateDisplay}}\n @context={{hash\n controller=@controller\n isTopLevel=false\n }}\n />\n {{/if}}\n <PropertyDetails\n @controller={{@controller}}\n @prop={{prop}}\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\n \"click\"\n (fn\n this.startPropertyUpdate importedResource prop\n )\n }}\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.removeProperty prop)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n </IRItem>\n {{/each-in}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any imported\n resources.</p>\n {{/if}}\n {{else}}\n <AuAlert @icon=\"alert-triangle\" @skin=\"warning\">This document does not\n support defining imported resources.</AuAlert>\n {{/if}}\n </c.content>\n </AuCard>\n\n {{! Add imported resource modal }}\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{this.isResourceModalOpen}}\n @closable={{true}}\n @closeModal={{this.closeResourceModal}}\n >\n <:title>Add Imported Resource</:title>\n <:body>\n <DefineImportedResourceForm\n id={{formId}}\n @onSave={{this.addImportedResource}}\n @onCancel={{this.closeResourceModal}}\n @controller={{@controller}}\n />\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton form={{formId}} type=\"submit\">Save</AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" this.closeResourceModal}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n\n {{#if this.status}}\n <RelationshipEditorDevModeModal\n @title={{this.modalTitle}}\n @initialData={{this.initialFormData}}\n @supportedDirections={{array \"property\"}}\n {{! @glint-expect-error }}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeRelationshipModal}}\n />\n {{/if}}\n </template>\n}\n"],"names":["truthy","maybe","isObjectEmpty","obj","Object","keys","length","DocImportedResourceEditorCard","Component","g","prototype","localCopy","i","void 0","tracked","openResourceModal","event","preventDefault","stopPropagation","isResourceModalOpen","closeResourceModal","closeRelationshipModal","status","undefined","toggleSection","expanded","args","onToggle","documentNode","controller","mainEditorState","doc","getSubjectPropertyMap","importedResources","documentImportedResources","props","attrs","propsAndSubjects","map","prop","isLinkTriple","subjects","getSubjectsFromBacklinksOfRelationship","predicate","object","mapped","fromEntries","imp","forEach","subject","concat","irCache","importedResourceProperties","newMap","entries","deepEqualPropertyList","docNodeImportedResources","schema","nodes","spec","IMPORTED_RESOURCES_ATTR","Array","from","Set","additionalImportedResources","values","addImportedResource","resource","withTransaction","transaction","removeImportedResource","startPropertyCreation","initialFormData","direction","mode","startPropertyUpdate","property","term","sayDataFactory","namedNode","target","onFormSubmit","body","removeProperty","value","doCommand","addProperty","view","mainEditorView","propertyToRemove","documentResourceNode","currentTerm","resourceNode","modalTitle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuToolbar","AuHeading","AuButton","on","not","AuList","PlusIcon","fn","CrossIcon","isEmpty","ConfigurableRdfaDisplay","predicateDisplay","hash","PropertyDetails","AuDropdown","ThreeDotsIcon","PencilIcon","BinIcon","AuAlert","WithUniqueId","AuModal","DefineImportedResourceForm","AuButtonGroup","RelationshipEditorDevModeModal","array"],"mappings":"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"}
1
+ {"version":3,"file":"card.js","sources":["../../../../src/components/_private/doc-imported-resource-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { isEmpty, not } from 'ember-truth-helpers';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\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 { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport { CrossIcon } from '@appuniversum/ember-appuniversum/components/icons/cross';\nimport type SayController from '#root/core/say-controller.ts';\nimport {\n addImportedResource,\n removeImportedResource,\n} from '#root/plugins/rdfa-info/imported-resources.ts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport {\n isLinkTriple,\n type OutgoingTriple,\n} from '#root/core/rdfa-processor.ts';\nimport { getSubjectsFromBacklinksOfRelationship } from '#root/utils/rdfa-utils.ts';\nimport { IMPORTED_RESOURCES_ATTR } from '#root/plugins/imported-resources/index.ts';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport { addProperty, removeProperty } from '#root/commands/index.ts';\nimport { deepEqualPropertyList } from '#root/plugins/rdfa-info/utils.ts';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport DefineImportedResourceForm from './form.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport { localCopy } from 'tracked-toolbox';\nimport type { SubmissionBody } from '#root/components/_private/relationship-editor/types.ts';\nimport RelationshipEditorDevModeModal from '../relationship-editor/modals/dev-mode.gts';\nimport { sayDataFactory } from '#root/core/say-data-factory/data-factory.ts';\nimport type { FormData } from '../relationship-editor/modals/dev-mode.gts';\nimport { array } from '@ember/helper';\nimport type { OptionGeneratorConfig } from '../relationship-editor/types.ts';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport { hash } from '@ember/helper';\n\ntype CreationStatus = {\n mode: 'creation';\n subject: string;\n};\ntype UpdateStatus = {\n mode: 'update';\n subject: string;\n property: OutgoingTriple;\n};\n\nexport type Status = CreationStatus | UpdateStatus;\n\ninterface Sig {\n Args: {\n controller: SayController;\n additionalImportedResources?: string[];\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n optionGeneratorConfig?: OptionGeneratorConfig;\n };\n Element: HTMLDivElement;\n}\n\n/** truth-helpers 'not' incorrectly treats [] as falsey */\nfunction truthy(maybe: unknown) {\n return !!maybe;\n}\n\nfunction isObjectEmpty(obj: Record<string, unknown>) {\n return Object.keys(obj).length === 0;\n}\n\nexport default class DocImportedResourceEditorCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n @tracked isResourceModalOpen = false;\n\n openResourceModal = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.isResourceModalOpen = true;\n };\n closeResourceModal = () => (this.isResourceModalOpen = false);\n\n @tracked status?: Status;\n @tracked initialFormData?: FormData;\n closeRelationshipModal = () => (this.status = undefined);\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n get documentNode() {\n return this.args.controller.mainEditorState.doc;\n }\n\n getSubjectPropertyMap(): Record<string, OutgoingTriple[]> {\n const importedResources = this.documentImportedResources;\n const props = this.documentNode.attrs['properties'] as OutgoingTriple[];\n if (!importedResources) return {};\n const propsAndSubjects = props.map((prop) => {\n if (!isLinkTriple(prop)) {\n return [];\n }\n const subjects = getSubjectsFromBacklinksOfRelationship(\n this.documentNode,\n importedResources,\n prop.predicate,\n prop.object,\n );\n return [prop, subjects] as [OutgoingTriple, string[]];\n });\n const mapped: Record<string, OutgoingTriple[]> = Object.fromEntries(\n importedResources.map((imp) => [imp, []]),\n );\n propsAndSubjects.forEach(([prop, subjects]) => {\n subjects?.forEach((subject) => {\n mapped[subject] = (mapped[subject] ?? []).concat(prop);\n });\n });\n return mapped;\n }\n\n // This isn't used to reduce re-calculations, just to re-use arrays when possible\n irCache: Record<string, OutgoingTriple[]> | undefined;\n get importedResourceProperties(): Record<string, OutgoingTriple[]> {\n if (!this.irCache) {\n // eslint-disable-next-line ember/no-side-effects\n this.irCache = {};\n }\n const newMap = this.getSubjectPropertyMap();\n // Re-use cached arrays if there are no changes to avoid re-renders that mess with on-clicks\n // eslint-disable-next-line ember/no-side-effects\n this.irCache = Object.fromEntries(\n Object.entries(newMap).map(([subject, props]) => {\n if (!this.irCache) return [subject, props];\n if (\n this.irCache[subject] &&\n deepEqualPropertyList(this.irCache[subject], props)\n ) {\n return [subject, this.irCache[subject]];\n } else {\n return [subject, props];\n }\n }),\n );\n return this.irCache;\n }\n\n /**\n * False if adding imported resources is not supported here, otherwise truthy, possibly empty\n * array\n */\n get documentImportedResources(): string[] | false {\n const docNodeImportedResources =\n !!this.args.controller?.schema.nodes['doc']?.spec.attrs?.[\n IMPORTED_RESOURCES_ATTR\n ] &&\n ((this.documentNode.attrs[IMPORTED_RESOURCES_ATTR] as string[]) || []);\n return (\n docNodeImportedResources &&\n Array.from(\n new Set<string>([\n ...(docNodeImportedResources || []),\n ...(this.args.additionalImportedResources || []),\n ]).values(),\n )\n );\n }\n\n addImportedResource = (resource: string) => {\n this.args.controller?.withTransaction(() => {\n if (!this.args.controller) return null;\n return addImportedResource({\n resource,\n })(this.args.controller.mainEditorState).transaction;\n });\n this.closeResourceModal();\n };\n removeImportedResource = (resource: string) => {\n this.args.controller?.withTransaction(() => {\n if (!this.args.controller) return null;\n return removeImportedResource({\n resource,\n })(this.args.controller.mainEditorState).transaction;\n });\n };\n startPropertyCreation = (resource: string, event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.initialFormData = {\n direction: 'property',\n };\n this.status = {\n mode: 'creation',\n subject: resource,\n };\n };\n startPropertyUpdate = (resource: string, property: OutgoingTriple) => {\n this.initialFormData = {\n direction: 'property',\n predicate: {\n direction: 'property',\n term: sayDataFactory.namedNode(property.predicate),\n },\n target: {\n // @ts-expect-error remove Blanknode as possible type\n term: property.object,\n },\n };\n this.status = {\n mode: 'update',\n subject: resource,\n property,\n };\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (!this.status) {\n return;\n }\n if (this.status.mode === 'update') {\n this.removeProperty(this.status.property);\n }\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.args.controller.doCommand(\n addProperty({\n resource: this.status.subject,\n // @ts-expect-error fix types\n property,\n }),\n {\n view: this.args.controller.mainEditorView,\n },\n );\n }\n\n this.closeRelationshipModal();\n };\n\n // TODO de-dupe this from property-editor?\n removeProperty = (property: OutgoingTriple) => {\n const propertyToRemove = {\n documentResourceNode: this.documentNode,\n importedResources: this.documentImportedResources || [],\n property,\n };\n this.args.controller?.doCommand(removeProperty(propertyToRemove), {\n view: this.args.controller.mainEditorView,\n });\n };\n\n get currentTerm() {\n return this.status && sayDataFactory.resourceNode(this.status.subject);\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 <template>\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 class=\"say-flex-grow\">\n\n <AuToolbar\n class=\"au-u-flex au-u-flex-row au-u-flex--space-between\"\n as |Group|\n >\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">Document imported resources</AuHeading>\n </Group>\n {{#if (truthy this.documentImportedResources)}}\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.openResourceModal}}>\n Add resource\n </AuButton>\n </Group>\n {{/if}}\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if (truthy this.documentImportedResources)}}\n {{#if (not (isObjectEmpty this.importedResourceProperties))}}\n <AuList @divider={{true}} as |IRItem|>\n {{#each-in\n this.importedResourceProperties\n as |importedResource props|\n }}\n <IRItem>\n <div\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <strong>{{importedResource}}</strong>\n <div>\n <AuButton\n @skin=\"link\"\n @icon={{PlusIcon}}\n role=\"button\"\n {{on\n \"click\"\n (fn this.startPropertyCreation importedResource)\n }}\n />\n <AuButton\n @skin=\"link\"\n @alert={{true}}\n @icon={{CrossIcon}}\n @disabled={{not (isEmpty props)}}\n role=\"button\"\n {{on\n \"click\"\n (fn this.removeImportedResource importedResource)\n }}\n />\n </div>\n </div>\n <AuList @divider={{true}} as |Item|>\n {{#each props 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 {{#if @controller}}\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{predicateDisplay}}\n @context={{hash\n controller=@controller\n isTopLevel=false\n }}\n />\n {{/if}}\n <PropertyDetails\n @controller={{@controller}}\n @prop={{prop}}\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\n \"click\"\n (fn\n this.startPropertyUpdate importedResource prop\n )\n }}\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.removeProperty prop)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n </IRItem>\n {{/each-in}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any imported\n resources.</p>\n {{/if}}\n {{else}}\n <AuAlert @icon=\"alert-triangle\" @skin=\"warning\">This document does not\n support defining imported resources.</AuAlert>\n {{/if}}\n </c.content>\n </AuCard>\n\n {{! Add imported resource modal }}\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{this.isResourceModalOpen}}\n @closable={{true}}\n @closeModal={{this.closeResourceModal}}\n >\n <:title>Add Imported Resource</:title>\n <:body>\n <DefineImportedResourceForm\n id={{formId}}\n @onSave={{this.addImportedResource}}\n @onCancel={{this.closeResourceModal}}\n @controller={{@controller}}\n />\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton form={{formId}} type=\"submit\">Save</AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" this.closeResourceModal}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n\n {{#if this.status}}\n <RelationshipEditorDevModeModal\n @title={{this.modalTitle}}\n @initialData={{this.initialFormData}}\n @supportedDirections={{array \"property\"}}\n {{! @glint-expect-error }}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeRelationshipModal}}\n />\n {{/if}}\n </template>\n}\n"],"names":["truthy","maybe","isObjectEmpty","obj","Object","keys","length","DocImportedResourceEditorCard","Component","g","prototype","localCopy","i","tracked","openResourceModal","event","preventDefault","stopPropagation","isResourceModalOpen","closeResourceModal","closeRelationshipModal","status","undefined","toggleSection","expanded","args","onToggle","documentNode","controller","mainEditorState","doc","getSubjectPropertyMap","importedResources","documentImportedResources","props","attrs","propsAndSubjects","map","prop","isLinkTriple","subjects","getSubjectsFromBacklinksOfRelationship","predicate","object","mapped","fromEntries","imp","forEach","subject","concat","irCache","importedResourceProperties","newMap","entries","deepEqualPropertyList","docNodeImportedResources","schema","nodes","spec","IMPORTED_RESOURCES_ATTR","Array","from","Set","additionalImportedResources","values","addImportedResource","resource","withTransaction","transaction","removeImportedResource","startPropertyCreation","initialFormData","direction","mode","startPropertyUpdate","property","term","sayDataFactory","namedNode","target","onFormSubmit","body","removeProperty","value","doCommand","addProperty","view","mainEditorView","propertyToRemove","documentResourceNode","currentTerm","resourceNode","modalTitle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuToolbar","AuHeading","AuButton","on","not","AuList","PlusIcon","fn","CrossIcon","isEmpty","ConfigurableRdfaDisplay","predicateDisplay","hash","PropertyDetails","AuDropdown","ThreeDotsIcon","PencilIcon","BinIcon","AuAlert","WithUniqueId","AuModal","DefineImportedResourceForm","AuButtonGroup","RelationshipEditorDevModeModal","array"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sources":["../../../../src/components/_private/doc-imported-resource-editor/form.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { ValidationError, string } from 'yup';\nimport type SayController from '#root/core/say-controller.ts';\nimport { on } from '@ember/modifier';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-pill';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\n\nconst resourceSchema = string().curie().required();\n\ninterface Sig {\n Args: {\n onSave: (resource: string) => void;\n onCancel: () => void;\n controller?: SayController;\n };\n Element: HTMLFormElement;\n}\n\nexport default class ImportedResourceCreatorForm extends Component<Sig> {\n @tracked\n resource: string | undefined = undefined;\n @tracked\n errors: ValidationError[] = [];\n\n validateForm(): string | false {\n this.errors = [];\n try {\n return resourceSchema.validateSync(this.resource);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.errors = e.inner;\n return false;\n } else {\n throw e;\n }\n }\n }\n findError = (path: string) => {\n return this.errors.find((error) => error.path === path)?.message ?? null;\n };\n\n handleInput = (event: Event) => {\n this.resource =\n (event.currentTarget &&\n 'value' in event.currentTarget &&\n (event.currentTarget?.value as string)) ||\n '';\n };\n handleSubmit = (event: SubmitEvent) => {\n event.preventDefault();\n const validated = this.validateForm();\n if (validated) {\n this.args.onSave(validated);\n }\n };\n\n <template>\n <form ...attributes {{on \"submit\" this.handleSubmit}}>\n <AuFormRow>\n <WithUniqueId as |id|>\n {{#let \"resource\" as |name|}}\n {{#let (this.findError name) as |error|}}\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >Resource</AuLabel>\n <AuInput\n id={{id}}\n name={{name}}\n value={{this.resource}}\n required={{true}}\n @width=\"block\"\n {{on \"input\" this.handleInput}}\n />\n {{#if error}}\n <AuPill>{{error}}</AuPill>\n {{/if}}\n {{/let}}\n {{/let}}\n </WithUniqueId>\n </AuFormRow>\n </form>\n </template>\n}\n"],"names":["resourceSchema","string","curie","required","ImportedResourceCreatorForm","Component","g","prototype","tracked","undefined","i","void 0","validateForm","errors","validateSync","resource","e","ValidationError","inner","findError","path","find","error","message","handleInput","event","currentTarget","value","handleSubmit","preventDefault","validated","args","onSave","setComponentTemplate","precompileTemplate","strictMode","scope","on","AuFormRow","WithUniqueId","AuLabel","AuInput","AuPill"],"mappings":";;;;;;;;;;;;;AAWA,MAAMA,cAAA,GAAiBC,MAAA,EAAA,CAASC,KAAK,EAAA,CAAGC,QAAQ,EAAA;AAWjC,MAAMC,oCAAoCC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAChEC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAC8BC,SAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,QAAA,EAAA,CAC9BC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAC2B,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,OAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,QAAA,CAAA,EAAAC,MAAA;AAE9BC,EAAAA,YAAAA,GAA+B;IAC7B,IAAI,CAACC,MAAM,GAAG,EAAE;IAChB,IAAI;AACF,MAAA,OAAOb,cAAA,CAAec,YAAY,CAAC,IAAI,CAACC,QAAQ,CAAA;IAClD,CAAA,CAAE,OAAOC,CAAA,EAAG;MACV,IAAIA,aAAaC,eAAA,EAAiB;AAChC,QAAA,IAAI,CAACJ,MAAM,GAAGG,CAAA,CAAEE,KAAK;AACrB,QAAA,OAAO,KAAA;AACT,MAAA,CAAA,MAAO;AACL,QAAA,MAAMF,CAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;EACAG,SAAA,GAAaC,IAAY,IAAA;AACvB,IAAA,OAAO,IAAI,CAACP,MAAM,CAACQ,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMF,IAAI,KAAKA,IAAA,CAAA,EAAOG,OAAA,IAAW,IAAA;EACtE,CAAA;EAEAC,WAAA,GAAeC,KAAO,IAAA;AACpB,IAAA,IAAI,CAACV,QAAQ,GACVU,KAAA,CAAMC,aAAa,IAClB,OAAA,IAAWD,KAAA,CAAMC,aAAa,IAC7BD,KAAA,CAAMC,aAAa,EAAEC,KAAgB,IACxC,EAAA;EACJ,CAAA;EACAC,YAAA,GAAgBH,KAAO,IAAA;IACrBA,KAAA,CAAMI,cAAc,EAAA;AACpB,IAAA,MAAMC,SAAA,GAAY,IAAI,CAAClB,YAAY,EAAA;AACnC,IAAA,IAAIkB,SAAA,EAAW;AACb,MAAA,IAAI,CAACC,IAAI,CAACC,MAAM,CAACF,SAAA,CAAA;AACnB,IAAA;EACF,CAAA;AAEA,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAAA,kpBAAA,EA2BA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,EAAA;QAAAC,SAAA;sBAAAC,qBAAA;QAAAC,OAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"form.js","sources":["../../../../src/components/_private/doc-imported-resource-editor/form.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { ValidationError, string } from 'yup';\nimport type SayController from '#root/core/say-controller.ts';\nimport { on } from '@ember/modifier';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-pill';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\n\nconst resourceSchema = string().curie().required();\n\ninterface Sig {\n Args: {\n onSave: (resource: string) => void;\n onCancel: () => void;\n controller?: SayController;\n };\n Element: HTMLFormElement;\n}\n\nexport default class ImportedResourceCreatorForm extends Component<Sig> {\n @tracked\n resource: string | undefined = undefined;\n @tracked\n errors: ValidationError[] = [];\n\n validateForm(): string | false {\n this.errors = [];\n try {\n return resourceSchema.validateSync(this.resource);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.errors = e.inner;\n return false;\n } else {\n throw e;\n }\n }\n }\n findError = (path: string) => {\n return this.errors.find((error) => error.path === path)?.message ?? null;\n };\n\n handleInput = (event: Event) => {\n this.resource =\n (event.currentTarget &&\n 'value' in event.currentTarget &&\n (event.currentTarget?.value as string)) ||\n '';\n };\n handleSubmit = (event: SubmitEvent) => {\n event.preventDefault();\n const validated = this.validateForm();\n if (validated) {\n this.args.onSave(validated);\n }\n };\n\n <template>\n <form ...attributes {{on \"submit\" this.handleSubmit}}>\n <AuFormRow>\n <WithUniqueId as |id|>\n {{#let \"resource\" as |name|}}\n {{#let (this.findError name) as |error|}}\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >Resource</AuLabel>\n <AuInput\n id={{id}}\n name={{name}}\n value={{this.resource}}\n required={{true}}\n @width=\"block\"\n {{on \"input\" this.handleInput}}\n />\n {{#if error}}\n <AuPill>{{error}}</AuPill>\n {{/if}}\n {{/let}}\n {{/let}}\n </WithUniqueId>\n </AuFormRow>\n </form>\n </template>\n}\n"],"names":["resourceSchema","string","curie","required","ImportedResourceCreatorForm","Component","g","prototype","tracked","undefined","i","validateForm","errors","validateSync","resource","e","ValidationError","inner","findError","path","find","error","message","handleInput","event","currentTarget","value","handleSubmit","preventDefault","validated","args","onSave","setComponentTemplate","precompileTemplate","strictMode","scope","on","AuFormRow","WithUniqueId","AuLabel","AuInput","AuPill"],"mappings":";;;;;;;;;;;;;AAWA,MAAMA,cAAA,GAAiBC,MAAA,EAAA,CAASC,KAAK,EAAA,CAAGC,QAAQ,EAAA;AAWjC,MAAMC,oCAAoCC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAChEC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAC8BC,SAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,QAAA,EAAA,CAC9BC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAC2B,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,OAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,QAAA,CAAA,EAAA,MAAA;AAE9BC,EAAAA,YAAAA,GAA+B;IAC7B,IAAI,CAACC,MAAM,GAAG,EAAE;IAChB,IAAI;AACF,MAAA,OAAOZ,cAAA,CAAea,YAAY,CAAC,IAAI,CAACC,QAAQ,CAAA;IAClD,CAAA,CAAE,OAAOC,CAAA,EAAG;MACV,IAAIA,aAAaC,eAAA,EAAiB;AAChC,QAAA,IAAI,CAACJ,MAAM,GAAGG,CAAA,CAAEE,KAAK;AACrB,QAAA,OAAO,KAAA;AACT,MAAA,CAAA,MAAO;AACL,QAAA,MAAMF,CAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;EACAG,SAAA,GAAaC,IAAY,IAAA;AACvB,IAAA,OAAO,IAAI,CAACP,MAAM,CAACQ,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMF,IAAI,KAAKA,IAAA,CAAA,EAAOG,OAAA,IAAW,IAAA;EACtE,CAAA;EAEAC,WAAA,GAAeC,KAAO,IAAA;AACpB,IAAA,IAAI,CAACV,QAAQ,GACVU,KAAA,CAAMC,aAAa,IAClB,OAAA,IAAWD,KAAA,CAAMC,aAAa,IAC7BD,KAAA,CAAMC,aAAa,EAAEC,KAAgB,IACxC,EAAA;EACJ,CAAA;EACAC,YAAA,GAAgBH,KAAO,IAAA;IACrBA,KAAA,CAAMI,cAAc,EAAA;AACpB,IAAA,MAAMC,SAAA,GAAY,IAAI,CAAClB,YAAY,EAAA;AACnC,IAAA,IAAIkB,SAAA,EAAW;AACb,MAAA,IAAI,CAACC,IAAI,CAACC,MAAM,CAACF,SAAA,CAAA;AACnB,IAAA;EACF,CAAA;AAEA,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAAA,kpBAAA,EA2BA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,EAAA;QAAAC,SAAA;sBAAAC,qBAAA;QAAAC,OAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -97,7 +97,7 @@ class ExternalTripleEditorCard extends Component {
97
97
  this.controller.mainEditorView.dispatch(tr);
98
98
  };
99
99
  static {
100
- setComponentTemplate(precompileTemplate("\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} as |c|>\n <c.header class=\"say-flex-grow\">\n <AuToolbar class=\"au-u-flex au-u-flex-row au-u-flex--space-between\" as |Group|>\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">External Triples</AuHeading>\n </Group>\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.addTriple}}>\n Add triple\n </AuButton>\n </Group>\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.externalTriples.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.externalTriples as |trip index|}}\n <Item>\n <ExternalTripleItem @trip={{trip}} @index={{index}} @onEdit={{this.editTriple}} @onRemove={{this.removeTriple}} />\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any external\n triples.</p>\n {{/if}}\n </c.content>\n </AuCard>\n <EditModal @modalOpen={{this.editModalOpen}} @onCancel={{this.closeModal}} @onSubmit={{this.updateExternalTriples}} @triple={{this.tripleBeingEdited}} />\n ", {
100
+ setComponentTemplate(precompileTemplate("\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} @disableAuContent={{true}} as |c|>\n <c.header class=\"say-flex-grow\">\n <AuToolbar class=\"au-u-flex au-u-flex-row au-u-flex--space-between\" as |Group|>\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">External Triples</AuHeading>\n </Group>\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.addTriple}}>\n Add triple\n </AuButton>\n </Group>\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.externalTriples.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.externalTriples as |trip index|}}\n <Item>\n <ExternalTripleItem @trip={{trip}} @index={{index}} @onEdit={{this.editTriple}} @onRemove={{this.removeTriple}} />\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any external\n triples.</p>\n {{/if}}\n </c.content>\n </AuCard>\n <EditModal @modalOpen={{this.editModalOpen}} @onCancel={{this.closeModal}} @onSubmit={{this.updateExternalTriples}} @triple={{this.tripleBeingEdited}} />\n ", {
101
101
  strictMode: true,
102
102
  scope: () => ({
103
103
  AuCard,
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../../../src/components/_private/external-triple-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport { tracked } from '@glimmer/tracking';\nimport type { FullTriple } from '#root/core/rdfa-processor.ts';\nimport ExternalTripleForm from './form.gts';\nimport { transformExternalTriples } from '#root/utils/external-triple-utils.ts';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ThreeDotsIcon } from '@appuniversum/ember-appuniversum/components/icons/three-dots';\nimport { BinIcon } from '@appuniversum/ember-appuniversum/components/icons/bin';\nimport { fn } from '@ember/helper';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport { isSome, type Option } from '#root/utils/_private/option.ts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport { modifier } from 'ember-modifier';\nimport { action } from '@ember/object';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport { localCopy } from 'tracked-toolbox';\n\ninterface Sig {\n Args: {\n controller: SayController;\n node: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n };\n}\nexport default class ExternalTripleEditorCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n @tracked\n editModalOpen = false;\n @tracked\n indexBeingEdited?: number;\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n get node() {\n return this.args.node;\n }\n get externalTriples(): FullTriple[] {\n return (this.node.value.attrs['externalTriples'] as FullTriple[]) ?? [];\n }\n get controller() {\n return this.args.controller;\n }\n get tripleBeingEdited(): Option<FullTriple> {\n if (isSome(this.indexBeingEdited)) {\n return this.externalTriples[this.indexBeingEdited];\n }\n return null;\n }\n closeModal = () => {\n this.editModalOpen = false;\n };\n updateExternalTriples = (trip: FullTriple) => {\n let tr;\n if (isSome(this.indexBeingEdited)) {\n const index = this.indexBeingEdited;\n tr = transformExternalTriples((triples) => {\n const copy = [...triples];\n copy.splice(index, 1, trip);\n return copy;\n }, this.args.node.pos)(this.controller.mainEditorState).transaction;\n } else {\n tr = transformExternalTriples(\n (triples) => triples.concat(trip),\n this.args.node.pos,\n )(this.controller.mainEditorState).transaction;\n }\n\n this.controller.mainEditorView.dispatch(tr);\n\n this.closeModal();\n };\n startTripleEdit = (index?: number) => {\n this.indexBeingEdited = index;\n\n this.editModalOpen = true;\n };\n addTriple = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.startTripleEdit();\n };\n editTriple = (index: number) => {\n this.startTripleEdit(index);\n };\n removeTriple = (index: number) => {\n const tr = transformExternalTriples((triples) => {\n const clone = [...triples];\n clone.splice(index, 1);\n return clone;\n }, this.args.node.pos)(this.controller.mainEditorState).transaction;\n this.controller.mainEditorView.dispatch(tr);\n };\n <template>\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 class=\"say-flex-grow\">\n <AuToolbar\n class=\"au-u-flex au-u-flex-row au-u-flex--space-between\"\n as |Group|\n >\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">External Triples</AuHeading>\n </Group>\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.addTriple}}>\n Add triple\n </AuButton>\n </Group>\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.externalTriples.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.externalTriples as |trip index|}}\n <Item>\n <ExternalTripleItem\n @trip={{trip}}\n @index={{index}}\n @onEdit={{this.editTriple}}\n @onRemove={{this.removeTriple}}\n />\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any external\n triples.</p>\n {{/if}}\n </c.content>\n </AuCard>\n <EditModal\n @modalOpen={{this.editModalOpen}}\n @onCancel={{this.closeModal}}\n @onSubmit={{this.updateExternalTriples}}\n @triple={{this.tripleBeingEdited}}\n />\n </template>\n}\n\ninterface EditModalSig {\n Args: {\n modalOpen: boolean;\n onCancel: () => void;\n onSubmit: (trip: FullTriple) => void;\n triple?: Option<FullTriple>;\n };\n}\n\nclass EditModal extends Component<EditModalSig> {\n @action\n onFormKeyDown(formElement: HTMLFormElement, event: KeyboardEvent) {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n formElement.requestSubmit();\n }\n return true;\n }\n\n @tracked initiallyFocusedElement?: HTMLElement;\n\n initialFocus = modifier((element: HTMLElement) => {\n this.initiallyFocusedElement = element;\n });\n\n <template>\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{@modalOpen}}\n @closable={{true}}\n @closeModal={{@onCancel}}\n {{! @glint-expect-error appuniversum types should be adapted to accept an html element here }}\n @initialFocus={{this.initiallyFocusedElement}}\n >\n <:title>Edit external triples</:title>\n <:body>\n <ExternalTripleForm\n @initialFocus={{this.initialFocus}}\n @onSubmit={{@onSubmit}}\n id={{formId}}\n @triple={{@triple}}\n @onKeyDown={{this.onFormKeyDown}}\n />\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton form={{formId}} type=\"submit\">Save</AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" @onCancel}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n </template>\n}\n\ninterface ExternalTripleItemSig {\n Args: {\n trip: FullTriple;\n index: number;\n onRemove: (index: number) => void;\n onEdit: (index: number) => void;\n };\n}\nclass ExternalTripleItem extends Component<ExternalTripleItemSig> {\n get datatype() {\n const trip = this.args.trip;\n if (trip.object.termType === 'Literal') {\n return trip.object.datatype.value;\n }\n return null;\n }\n get language() {\n const trip = this.args.trip;\n if (trip.object.termType === 'Literal') {\n return trip.object.language;\n }\n return null;\n }\n <template>\n <div class=\"au-u-padding-tiny\">\n <p><strong>subject:</strong> {{@trip.subject.value}}</p>\n <p><strong>predicate:</strong> {{@trip.predicate}}</p>\n {{#if this.datatype}}\n <p><strong>datatype:</strong> {{this.datatype}}</p>\n {{/if}}\n {{#if this.language}}\n <p><strong>language:</strong> {{this.language}}</p>\n {{/if}}\n <p><strong>value:</strong> {{@trip.object.value}}</p>\n </div>\n\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn @onEdit @index)}}\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 @onRemove @index)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </template>\n}\n"],"names":["ExternalTripleEditorCard","Component","g","prototype","localCopy","i","void 0","tracked","toggleSection","expanded","args","onToggle","node","externalTriples","value","attrs","controller","tripleBeingEdited","isSome","indexBeingEdited","closeModal","editModalOpen","updateExternalTriples","trip","tr","index","transformExternalTriples","triples","copy","splice","pos","mainEditorState","transaction","concat","mainEditorView","dispatch","startTripleEdit","addTriple","event","preventDefault","stopPropagation","editTriple","removeTriple","clone","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuToolbar","AuHeading","AuButton","on","AuList","ExternalTripleItem","EditModal","onFormKeyDown","formElement","key","ctrlKey","metaKey","requestSubmit","n","action","initialFocus","modifier","element","initiallyFocusedElement","WithUniqueId","AuModal","ExternalTripleForm","AuButtonGroup","datatype","object","termType","language","AuDropdown","ThreeDotsIcon","PencilIcon","fn","BinIcon"],"mappings":"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"}
1
+ {"version":3,"file":"card.js","sources":["../../../../src/components/_private/external-triple-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport { tracked } from '@glimmer/tracking';\nimport type { FullTriple } from '#root/core/rdfa-processor.ts';\nimport ExternalTripleForm from './form.gts';\nimport { transformExternalTriples } from '#root/utils/external-triple-utils.ts';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ThreeDotsIcon } from '@appuniversum/ember-appuniversum/components/icons/three-dots';\nimport { BinIcon } from '@appuniversum/ember-appuniversum/components/icons/bin';\nimport { fn } from '@ember/helper';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport { isSome, type Option } from '#root/utils/_private/option.ts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport { modifier } from 'ember-modifier';\nimport { action } from '@ember/object';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport { localCopy } from 'tracked-toolbox';\n\ninterface Sig {\n Args: {\n controller: SayController;\n node: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n };\n}\nexport default class ExternalTripleEditorCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n @tracked\n editModalOpen = false;\n @tracked\n indexBeingEdited?: number;\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n get node() {\n return this.args.node;\n }\n get externalTriples(): FullTriple[] {\n return (this.node.value.attrs['externalTriples'] as FullTriple[]) ?? [];\n }\n get controller() {\n return this.args.controller;\n }\n get tripleBeingEdited(): Option<FullTriple> {\n if (isSome(this.indexBeingEdited)) {\n return this.externalTriples[this.indexBeingEdited];\n }\n return null;\n }\n closeModal = () => {\n this.editModalOpen = false;\n };\n updateExternalTriples = (trip: FullTriple) => {\n let tr;\n if (isSome(this.indexBeingEdited)) {\n const index = this.indexBeingEdited;\n tr = transformExternalTriples((triples) => {\n const copy = [...triples];\n copy.splice(index, 1, trip);\n return copy;\n }, this.args.node.pos)(this.controller.mainEditorState).transaction;\n } else {\n tr = transformExternalTriples(\n (triples) => triples.concat(trip),\n this.args.node.pos,\n )(this.controller.mainEditorState).transaction;\n }\n\n this.controller.mainEditorView.dispatch(tr);\n\n this.closeModal();\n };\n startTripleEdit = (index?: number) => {\n this.indexBeingEdited = index;\n\n this.editModalOpen = true;\n };\n addTriple = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.startTripleEdit();\n };\n editTriple = (index: number) => {\n this.startTripleEdit(index);\n };\n removeTriple = (index: number) => {\n const tr = transformExternalTriples((triples) => {\n const clone = [...triples];\n clone.splice(index, 1);\n return clone;\n }, this.args.node.pos)(this.controller.mainEditorState).transaction;\n this.controller.mainEditorView.dispatch(tr);\n };\n <template>\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 class=\"say-flex-grow\">\n <AuToolbar\n class=\"au-u-flex au-u-flex-row au-u-flex--space-between\"\n as |Group|\n >\n <Group>\n <AuHeading @level=\"1\" @skin=\"6\">External Triples</AuHeading>\n </Group>\n <Group>\n <AuButton @skin=\"link\" {{on \"click\" this.addTriple}}>\n Add triple\n </AuButton>\n </Group>\n </AuToolbar>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.externalTriples.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.externalTriples as |trip index|}}\n <Item>\n <ExternalTripleItem\n @trip={{trip}}\n @index={{index}}\n @onEdit={{this.editTriple}}\n @onRemove={{this.removeTriple}}\n />\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This document does not define any external\n triples.</p>\n {{/if}}\n </c.content>\n </AuCard>\n <EditModal\n @modalOpen={{this.editModalOpen}}\n @onCancel={{this.closeModal}}\n @onSubmit={{this.updateExternalTriples}}\n @triple={{this.tripleBeingEdited}}\n />\n </template>\n}\n\ninterface EditModalSig {\n Args: {\n modalOpen: boolean;\n onCancel: () => void;\n onSubmit: (trip: FullTriple) => void;\n triple?: Option<FullTriple>;\n };\n}\n\nclass EditModal extends Component<EditModalSig> {\n @action\n onFormKeyDown(formElement: HTMLFormElement, event: KeyboardEvent) {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n formElement.requestSubmit();\n }\n return true;\n }\n\n @tracked initiallyFocusedElement?: HTMLElement;\n\n initialFocus = modifier((element: HTMLElement) => {\n this.initiallyFocusedElement = element;\n });\n\n <template>\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{@modalOpen}}\n @closable={{true}}\n @closeModal={{@onCancel}}\n {{! @glint-expect-error appuniversum types should be adapted to accept an html element here }}\n @initialFocus={{this.initiallyFocusedElement}}\n >\n <:title>Edit external triples</:title>\n <:body>\n <ExternalTripleForm\n @initialFocus={{this.initialFocus}}\n @onSubmit={{@onSubmit}}\n id={{formId}}\n @triple={{@triple}}\n @onKeyDown={{this.onFormKeyDown}}\n />\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton form={{formId}} type=\"submit\">Save</AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" @onCancel}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n </template>\n}\n\ninterface ExternalTripleItemSig {\n Args: {\n trip: FullTriple;\n index: number;\n onRemove: (index: number) => void;\n onEdit: (index: number) => void;\n };\n}\nclass ExternalTripleItem extends Component<ExternalTripleItemSig> {\n get datatype() {\n const trip = this.args.trip;\n if (trip.object.termType === 'Literal') {\n return trip.object.datatype.value;\n }\n return null;\n }\n get language() {\n const trip = this.args.trip;\n if (trip.object.termType === 'Literal') {\n return trip.object.language;\n }\n return null;\n }\n <template>\n <div class=\"au-u-padding-tiny\">\n <p><strong>subject:</strong> {{@trip.subject.value}}</p>\n <p><strong>predicate:</strong> {{@trip.predicate}}</p>\n {{#if this.datatype}}\n <p><strong>datatype:</strong> {{this.datatype}}</p>\n {{/if}}\n {{#if this.language}}\n <p><strong>language:</strong> {{this.language}}</p>\n {{/if}}\n <p><strong>value:</strong> {{@trip.object.value}}</p>\n </div>\n\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn @onEdit @index)}}\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 @onRemove @index)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </template>\n}\n"],"names":["ExternalTripleEditorCard","Component","g","prototype","localCopy","i","tracked","toggleSection","expanded","args","onToggle","node","externalTriples","value","attrs","controller","tripleBeingEdited","isSome","indexBeingEdited","closeModal","editModalOpen","updateExternalTriples","trip","tr","index","transformExternalTriples","triples","copy","splice","pos","mainEditorState","transaction","concat","mainEditorView","dispatch","startTripleEdit","addTriple","event","preventDefault","stopPropagation","editTriple","removeTriple","clone","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuToolbar","AuHeading","AuButton","on","AuList","ExternalTripleItem","EditModal","onFormKeyDown","formElement","key","ctrlKey","metaKey","requestSubmit","n","action","initialFocus","modifier","element","initiallyFocusedElement","WithUniqueId","AuModal","ExternalTripleForm","AuButtonGroup","datatype","object","termType","language","AuDropdown","ThreeDotsIcon","PencilIcon","fn","BinIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sources":["../../../../src/components/_private/external-triple-editor/form.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { ValidationError, object, string } from 'yup';\nimport { on } from '@ember/modifier';\nimport { tracked } from '@glimmer/tracking';\nimport type { FullTriple } from '#root/core/rdfa-processor.ts';\nimport { localCopy } from 'tracked-toolbox';\nimport {\n literalTermSchema,\n namedNodeTermSchema,\n} from '#root/components/_private/common/object-term-schemas.ts';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuInput, {\n type AuInputSignature,\n} from '@appuniversum/ember-appuniversum/components/au-input';\nimport {\n languageOrDataType,\n sayDataFactory,\n} from '#root/core/say-data-factory/index.ts';\nimport PowerSelect from 'ember-power-select/components/power-select';\nimport { eq } from 'ember-truth-helpers';\nimport { type Option } from '#root/utils/_private/option.ts';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { modifier } from 'ember-modifier';\nimport type { Select } from 'ember-power-select/components/power-select';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport type { ModifierLike } from '@glint/template';\nconst predicateSchema = string().curie().required();\n\nconst literalTripleSchema = object({\n subject: namedNodeTermSchema,\n predicate: predicateSchema,\n object: literalTermSchema,\n});\nconst namedNodeTripleSchema = object({\n subject: namedNodeTermSchema,\n predicate: predicateSchema,\n object: namedNodeTermSchema,\n});\ninterface ValidResult {\n valid: true;\n triple: FullTriple;\n}\ninterface InvalidResult {\n valid: false;\n errors: ValidationError[];\n}\ntype ValidationResult = ValidResult | InvalidResult;\ninterface ExternalTripleFormSig {\n Element: HTMLFormElement;\n Args: {\n initialFocus?: ModifierLike<{ Element: HTMLElement }>;\n onKeyDown?: (\n form: HTMLFormElement,\n event: KeyboardEvent,\n ) => boolean | undefined;\n onSubmit: (trip: FullTriple) => void;\n triple?: Option<FullTriple>;\n };\n}\nconst DEFAULT_TRIPLE: FullTriple = {\n subject: sayDataFactory.namedNode(''),\n predicate: '',\n object: sayDataFactory.namedNode(''),\n};\nexport type SupportedTermType = 'NamedNode' | 'Literal';\nexport default class ExternalTripleForm extends Component<ExternalTripleFormSig> {\n formElement?: HTMLFormElement;\n setupFormElement = modifier((element: HTMLFormElement) => {\n this.formElement = element;\n const keyDownHandler = (event: KeyboardEvent) => {\n if (this.args.onKeyDown) {\n this.args.onKeyDown(element, event);\n }\n };\n window.addEventListener('keydown', keyDownHandler);\n return () => window.removeEventListener('keydown', keyDownHandler);\n });\n\n @localCopy('args.triple.subject.value')\n subject: string = '';\n\n @localCopy('args.triple.object.termType')\n selectedTermType?: SupportedTermType;\n\n @tracked\n predicate: string = '';\n\n @tracked\n object: string = '';\n\n @tracked\n errors: ValidationError[] = [];\n\n @tracked\n currentFormData: FormData | null = null;\n\n datatypePath = 'object.datatype.value';\n languagePath = 'object.language';\n get termType() {\n return this.selectedTermType ?? 'NamedNode';\n }\n get triple() {\n return this.args.triple ?? DEFAULT_TRIPLE;\n }\n get datatype() {\n if (this.triple.object.termType === 'Literal') {\n return this.triple.object.datatype.value;\n }\n return '';\n }\n get language() {\n if (this.triple.object.termType === 'Literal') {\n return this.triple.object.language;\n }\n return '';\n }\n get termTypes(): SupportedTermType[] {\n return ['NamedNode', 'Literal'];\n }\n get hasLanguage() {\n return Boolean(\n this.currentFormData?.get(this.languagePath)?.toString().length,\n );\n }\n get hasDatatype() {\n return (\n !this.hasLanguage &&\n Boolean(this.currentFormData?.get(this.datatypePath)?.toString().length)\n );\n }\n selectTermType = (value: SupportedTermType) => {\n this.selectedTermType = value;\n this.errors = [];\n };\n extractNamedNode = (formData: FormData, base: string) => {\n return {\n termType: 'NamedNode',\n value: formData.get(`${base}.value`)?.toString(),\n };\n };\n extractLiteral = (formData: FormData, base: string) => {\n const extractedDatatype = this.extractNamedNode(\n formData,\n `${base}.datatype`,\n );\n const datatype = extractedDatatype?.value?.length\n ? extractedDatatype\n : undefined;\n\n return {\n termType: 'Literal',\n value: formData.get(`${base}.value`)?.toString(),\n datatype,\n language: formData.get(`${base}.language`)?.toString(),\n };\n };\n validateFormData = (formData: FormData): ValidationResult => {\n try {\n if (this.termType === 'NamedNode') {\n const validated = namedNodeTripleSchema.validateSync(\n {\n subject: this.extractNamedNode(formData, 'subject'),\n predicate: formData.get('predicate')?.toString(),\n object: this.extractNamedNode(formData, 'object'),\n },\n { abortEarly: false },\n );\n return {\n valid: true,\n triple: {\n subject: sayDataFactory.namedNode(validated.subject.value),\n predicate: validated.predicate,\n object: sayDataFactory.namedNode(validated.object.value),\n },\n };\n } else {\n const validated = literalTripleSchema.validateSync(\n {\n subject: this.extractNamedNode(formData, 'subject'),\n predicate: formData.get('predicate')?.toString(),\n object: this.extractLiteral(formData, 'object'),\n },\n { abortEarly: false },\n );\n\n return {\n valid: true,\n triple: {\n subject: sayDataFactory.namedNode(validated.subject.value),\n predicate: validated.predicate,\n object:\n validated.object &&\n sayDataFactory.literal(\n validated.object.value,\n languageOrDataType(\n validated.object.language,\n validated.object.datatype &&\n sayDataFactory.namedNode(validated.object.datatype.value),\n ),\n ),\n },\n };\n }\n } catch (e) {\n if (e instanceof ValidationError) {\n return { valid: false, errors: e.inner };\n } else {\n throw e;\n }\n }\n };\n\n handleSubmit = (event: SubmitEvent) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget as HTMLFormElement);\n const validation = this.validateFormData(formData);\n if (validation.valid) {\n this.args.onSubmit?.(validation.triple);\n } else {\n this.errors = validation.errors;\n }\n };\n handleInput = (event: Event) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement);\n this.currentFormData = formData;\n };\n initAfterInsert = modifier((form: HTMLFormElement) => {\n const formData = new FormData(form);\n this.currentFormData = formData;\n });\n\n onPowerSelectKeydown = (\n _select: Select,\n event: KeyboardEvent,\n ): boolean | undefined => {\n if (this.formElement && this.args.onKeyDown) {\n this.args.onKeyDown(this.formElement, event);\n }\n return;\n };\n <template>\n <form\n {{on \"submit\" this.handleSubmit}}\n {{on \"input\" this.handleInput}}\n {{this.initAfterInsert}}\n {{this.setupFormElement}}\n ...attributes\n >\n\n <StringField\n {{@initialFocus}}\n @name=\"subject.value\"\n @required={{true}}\n @errors={{this.errors}}\n @value={{this.triple.subject.value}}\n >Subject</StringField>\n <StringField\n @name=\"predicate\"\n @required={{true}}\n @errors={{this.errors}}\n @value={{this.triple.predicate}}\n >Predicate</StringField>\n <TermTypeSelectField\n @name=\"termType\"\n @selected={{this.termType}}\n @options={{this.termTypes}}\n @onChange={{this.selectTermType}}\n @onKeyDown={{this.onPowerSelectKeydown}}\n @errors={{this.errors}}\n @required={{true}}\n >\n TermType\n </TermTypeSelectField>\n <StringField\n @name=\"object.value\"\n @required={{true}}\n @errors={{this.errors}}\n @value={{this.triple.object.value}}\n >Value</StringField>\n\n {{#unless (eq this.termType \"NamedNode\")}}\n <StringField\n @name={{this.datatypePath}}\n @required={{false}}\n @errors={{this.errors}}\n @value={{this.datatype}}\n @disabled={{this.hasLanguage}}\n >Datatype</StringField>\n <StringField\n @name={{this.languagePath}}\n @required={{false}}\n @errors={{this.errors}}\n @value={{this.language}}\n @disabled={{this.hasDatatype}}\n >Language</StringField>\n {{/unless}}\n </form>\n </template>\n}\ninterface FieldArgs {\n name: string;\n errors: ValidationError[];\n required: boolean;\n}\ninterface StringFieldSig {\n Blocks: {\n default: [];\n };\n Args: FieldArgs & { value: string; disabled?: boolean };\n Element: AuInputSignature['Element'];\n}\n\nconst StringField: TemplateOnlyComponent<StringFieldSig> = <template>\n <FormField @name={{@name}} @errors={{@errors}} @required={{@required}}>\n <:label>\n {{yield}}\n </:label>\n\n <:default as |id|>\n <AuInput\n id={{id}}\n name={{@name}}\n value={{@value}}\n required={{@required}}\n @disabled={{@disabled}}\n @width=\"block\"\n ...attributes\n />\n </:default>\n </FormField>\n</template>;\n\ninterface SelectFieldArgs<T> extends FieldArgs {\n options: T[];\n selected: T;\n onChange: (newValue: T, select: Select, event?: Event) => void;\n onKeyDown?: (select: Select, e: KeyboardEvent) => boolean | undefined;\n}\ninterface SelectFieldSig<T> {\n Args: SelectFieldArgs<T>;\n Blocks: { default: [] };\n Element: HTMLElement;\n}\n\n// TOCs can't have a generic argument, so in this case we have to make a backing\n// class\n// ref: https://typed-ember.gitbook.io/glint/environments/ember/template-only-components\nclass SelectField<T> extends Component<SelectFieldSig<T>> {\n onChange = (selection: unknown, select: Select, event?: Event) => {\n this.args.onChange(selection as T, select, event);\n };\n <template>\n <FormField @name={{@name}} @errors={{@errors}} @required={{@required}}>\n <:label>\n {{yield}}\n </:label>\n\n <:default as |id|>\n\n <PowerSelect\n id={{id}}\n {{! For some reason need to manually set width }}\n class=\"au-u-1-1\"\n @searchEnabled={{false}}\n @options={{@options}}\n @selected={{@selected}}\n @onChange={{this.onChange}}\n @onKeydown={{@onKeyDown}}\n ...attributes\n as |obj|\n >\n {{obj}}\n </PowerSelect>\n </:default>\n </FormField>\n </template>\n}\nconst TermTypeSelectField = SelectField<'NamedNode' | 'Literal'>;\ninterface FormFieldSig {\n Args: FieldArgs;\n Blocks: { default: [id: string]; label: [] };\n}\nclass FormField extends Component<FormFieldSig> {\n findError = (errors: ValidationError[], path: string) => {\n return errors.find((error) => error.path === path)?.message ?? null;\n };\n <template>\n <AuFormRow>\n <WithUniqueId as |id|>\n {{#let (this.findError @errors @name) as |error|}}\n <AuLabel\n for={{id}}\n @required={{@required}}\n @requiredLabel=\"Required\"\n >{{yield to=\"label\"}}</AuLabel>\n {{yield id}}\n {{#if error}}\n <AuPill>{{error}}</AuPill>\n {{/if}}\n {{/let}}\n </WithUniqueId>\n </AuFormRow>\n </template>\n}\n"],"names":["predicateSchema","string","curie","required","literalTripleSchema","object","subject","namedNodeTermSchema","predicate","literalTermSchema","namedNodeTripleSchema","DEFAULT_TRIPLE","sayDataFactory","namedNode","ExternalTripleForm","Component","formElement","setupFormElement","modifier","element","keyDownHandler","event","args","onKeyDown","window","addEventListener","removeEventListener","g","prototype","localCopy","i","void 0","tracked","datatypePath","languagePath","termType","selectedTermType","triple","datatype","value","language","termTypes","hasLanguage","Boolean","currentFormData","get","toString","length","hasDatatype","selectTermType","errors","extractNamedNode","formData","base","extractLiteral","extractedDatatype","undefined","validateFormData","validated","validateSync","abortEarly","valid","literal","languageOrDataType","e","ValidationError","inner","handleSubmit","preventDefault","FormData","currentTarget","validation","onSubmit","handleInput","initAfterInsert","form","onPowerSelectKeydown","_select","setComponentTemplate","precompileTemplate","strictMode","scope","on","StringField","TermTypeSelectField","eq","FormField","AuInput","templateOnly","SelectField","onChange","selection","select","PowerSelect","findError","path","find","error","message","AuFormRow","WithUniqueId","AuLabel","AuPill"],"mappings":"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"}
1
+ {"version":3,"file":"form.js","sources":["../../../../src/components/_private/external-triple-editor/form.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { ValidationError, object, string } from 'yup';\nimport { on } from '@ember/modifier';\nimport { tracked } from '@glimmer/tracking';\nimport type { FullTriple } from '#root/core/rdfa-processor.ts';\nimport { localCopy } from 'tracked-toolbox';\nimport {\n literalTermSchema,\n namedNodeTermSchema,\n} from '#root/components/_private/common/object-term-schemas.ts';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuInput, {\n type AuInputSignature,\n} from '@appuniversum/ember-appuniversum/components/au-input';\nimport {\n languageOrDataType,\n sayDataFactory,\n} from '#root/core/say-data-factory/index.ts';\nimport PowerSelect from 'ember-power-select/components/power-select';\nimport { eq } from 'ember-truth-helpers';\nimport { type Option } from '#root/utils/_private/option.ts';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { modifier } from 'ember-modifier';\nimport type { Select } from 'ember-power-select/components/power-select';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport type { ModifierLike } from '@glint/template';\nconst predicateSchema = string().curie().required();\n\nconst literalTripleSchema = object({\n subject: namedNodeTermSchema,\n predicate: predicateSchema,\n object: literalTermSchema,\n});\nconst namedNodeTripleSchema = object({\n subject: namedNodeTermSchema,\n predicate: predicateSchema,\n object: namedNodeTermSchema,\n});\ninterface ValidResult {\n valid: true;\n triple: FullTriple;\n}\ninterface InvalidResult {\n valid: false;\n errors: ValidationError[];\n}\ntype ValidationResult = ValidResult | InvalidResult;\ninterface ExternalTripleFormSig {\n Element: HTMLFormElement;\n Args: {\n initialFocus?: ModifierLike<{ Element: HTMLElement }>;\n onKeyDown?: (\n form: HTMLFormElement,\n event: KeyboardEvent,\n ) => boolean | undefined;\n onSubmit: (trip: FullTriple) => void;\n triple?: Option<FullTriple>;\n };\n}\nconst DEFAULT_TRIPLE: FullTriple = {\n subject: sayDataFactory.namedNode(''),\n predicate: '',\n object: sayDataFactory.namedNode(''),\n};\nexport type SupportedTermType = 'NamedNode' | 'Literal';\nexport default class ExternalTripleForm extends Component<ExternalTripleFormSig> {\n formElement?: HTMLFormElement;\n setupFormElement = modifier((element: HTMLFormElement) => {\n this.formElement = element;\n const keyDownHandler = (event: KeyboardEvent) => {\n if (this.args.onKeyDown) {\n this.args.onKeyDown(element, event);\n }\n };\n window.addEventListener('keydown', keyDownHandler);\n return () => window.removeEventListener('keydown', keyDownHandler);\n });\n\n @localCopy('args.triple.subject.value')\n subject: string = '';\n\n @localCopy('args.triple.object.termType')\n selectedTermType?: SupportedTermType;\n\n @tracked\n predicate: string = '';\n\n @tracked\n object: string = '';\n\n @tracked\n errors: ValidationError[] = [];\n\n @tracked\n currentFormData: FormData | null = null;\n\n datatypePath = 'object.datatype.value';\n languagePath = 'object.language';\n get termType() {\n return this.selectedTermType ?? 'NamedNode';\n }\n get triple() {\n return this.args.triple ?? DEFAULT_TRIPLE;\n }\n get datatype() {\n if (this.triple.object.termType === 'Literal') {\n return this.triple.object.datatype.value;\n }\n return '';\n }\n get language() {\n if (this.triple.object.termType === 'Literal') {\n return this.triple.object.language;\n }\n return '';\n }\n get termTypes(): SupportedTermType[] {\n return ['NamedNode', 'Literal'];\n }\n get hasLanguage() {\n return Boolean(\n this.currentFormData?.get(this.languagePath)?.toString().length,\n );\n }\n get hasDatatype() {\n return (\n !this.hasLanguage &&\n Boolean(this.currentFormData?.get(this.datatypePath)?.toString().length)\n );\n }\n selectTermType = (value: SupportedTermType) => {\n this.selectedTermType = value;\n this.errors = [];\n };\n extractNamedNode = (formData: FormData, base: string) => {\n return {\n termType: 'NamedNode',\n value: formData.get(`${base}.value`)?.toString(),\n };\n };\n extractLiteral = (formData: FormData, base: string) => {\n const extractedDatatype = this.extractNamedNode(\n formData,\n `${base}.datatype`,\n );\n const datatype = extractedDatatype?.value?.length\n ? extractedDatatype\n : undefined;\n\n return {\n termType: 'Literal',\n value: formData.get(`${base}.value`)?.toString(),\n datatype,\n language: formData.get(`${base}.language`)?.toString(),\n };\n };\n validateFormData = (formData: FormData): ValidationResult => {\n try {\n if (this.termType === 'NamedNode') {\n const validated = namedNodeTripleSchema.validateSync(\n {\n subject: this.extractNamedNode(formData, 'subject'),\n predicate: formData.get('predicate')?.toString(),\n object: this.extractNamedNode(formData, 'object'),\n },\n { abortEarly: false },\n );\n return {\n valid: true,\n triple: {\n subject: sayDataFactory.namedNode(validated.subject.value),\n predicate: validated.predicate,\n object: sayDataFactory.namedNode(validated.object.value),\n },\n };\n } else {\n const validated = literalTripleSchema.validateSync(\n {\n subject: this.extractNamedNode(formData, 'subject'),\n predicate: formData.get('predicate')?.toString(),\n object: this.extractLiteral(formData, 'object'),\n },\n { abortEarly: false },\n );\n\n return {\n valid: true,\n triple: {\n subject: sayDataFactory.namedNode(validated.subject.value),\n predicate: validated.predicate,\n object:\n validated.object &&\n sayDataFactory.literal(\n validated.object.value,\n languageOrDataType(\n validated.object.language,\n validated.object.datatype &&\n sayDataFactory.namedNode(validated.object.datatype.value),\n ),\n ),\n },\n };\n }\n } catch (e) {\n if (e instanceof ValidationError) {\n return { valid: false, errors: e.inner };\n } else {\n throw e;\n }\n }\n };\n\n handleSubmit = (event: SubmitEvent) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget as HTMLFormElement);\n const validation = this.validateFormData(formData);\n if (validation.valid) {\n this.args.onSubmit?.(validation.triple);\n } else {\n this.errors = validation.errors;\n }\n };\n handleInput = (event: Event) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement);\n this.currentFormData = formData;\n };\n initAfterInsert = modifier((form: HTMLFormElement) => {\n const formData = new FormData(form);\n this.currentFormData = formData;\n });\n\n onPowerSelectKeydown = (\n _select: Select,\n event: KeyboardEvent,\n ): boolean | undefined => {\n if (this.formElement && this.args.onKeyDown) {\n this.args.onKeyDown(this.formElement, event);\n }\n return;\n };\n <template>\n <form\n {{on \"submit\" this.handleSubmit}}\n {{on \"input\" this.handleInput}}\n {{this.initAfterInsert}}\n {{this.setupFormElement}}\n ...attributes\n >\n\n <StringField\n {{@initialFocus}}\n @name=\"subject.value\"\n @required={{true}}\n @errors={{this.errors}}\n @value={{this.triple.subject.value}}\n >Subject</StringField>\n <StringField\n @name=\"predicate\"\n @required={{true}}\n @errors={{this.errors}}\n @value={{this.triple.predicate}}\n >Predicate</StringField>\n <TermTypeSelectField\n @name=\"termType\"\n @selected={{this.termType}}\n @options={{this.termTypes}}\n @onChange={{this.selectTermType}}\n @onKeyDown={{this.onPowerSelectKeydown}}\n @errors={{this.errors}}\n @required={{true}}\n >\n TermType\n </TermTypeSelectField>\n <StringField\n @name=\"object.value\"\n @required={{true}}\n @errors={{this.errors}}\n @value={{this.triple.object.value}}\n >Value</StringField>\n\n {{#unless (eq this.termType \"NamedNode\")}}\n <StringField\n @name={{this.datatypePath}}\n @required={{false}}\n @errors={{this.errors}}\n @value={{this.datatype}}\n @disabled={{this.hasLanguage}}\n >Datatype</StringField>\n <StringField\n @name={{this.languagePath}}\n @required={{false}}\n @errors={{this.errors}}\n @value={{this.language}}\n @disabled={{this.hasDatatype}}\n >Language</StringField>\n {{/unless}}\n </form>\n </template>\n}\ninterface FieldArgs {\n name: string;\n errors: ValidationError[];\n required: boolean;\n}\ninterface StringFieldSig {\n Blocks: {\n default: [];\n };\n Args: FieldArgs & { value: string; disabled?: boolean };\n Element: AuInputSignature['Element'];\n}\n\nconst StringField: TemplateOnlyComponent<StringFieldSig> = <template>\n <FormField @name={{@name}} @errors={{@errors}} @required={{@required}}>\n <:label>\n {{yield}}\n </:label>\n\n <:default as |id|>\n <AuInput\n id={{id}}\n name={{@name}}\n value={{@value}}\n required={{@required}}\n @disabled={{@disabled}}\n @width=\"block\"\n ...attributes\n />\n </:default>\n </FormField>\n</template>;\n\ninterface SelectFieldArgs<T> extends FieldArgs {\n options: T[];\n selected: T;\n onChange: (newValue: T, select: Select, event?: Event) => void;\n onKeyDown?: (select: Select, e: KeyboardEvent) => boolean | undefined;\n}\ninterface SelectFieldSig<T> {\n Args: SelectFieldArgs<T>;\n Blocks: { default: [] };\n Element: HTMLElement;\n}\n\n// TOCs can't have a generic argument, so in this case we have to make a backing\n// class\n// ref: https://typed-ember.gitbook.io/glint/environments/ember/template-only-components\nclass SelectField<T> extends Component<SelectFieldSig<T>> {\n onChange = (selection: unknown, select: Select, event?: Event) => {\n this.args.onChange(selection as T, select, event);\n };\n <template>\n <FormField @name={{@name}} @errors={{@errors}} @required={{@required}}>\n <:label>\n {{yield}}\n </:label>\n\n <:default as |id|>\n\n <PowerSelect\n id={{id}}\n {{! For some reason need to manually set width }}\n class=\"au-u-1-1\"\n @searchEnabled={{false}}\n @options={{@options}}\n @selected={{@selected}}\n @onChange={{this.onChange}}\n @onKeydown={{@onKeyDown}}\n ...attributes\n as |obj|\n >\n {{obj}}\n </PowerSelect>\n </:default>\n </FormField>\n </template>\n}\nconst TermTypeSelectField = SelectField<'NamedNode' | 'Literal'>;\ninterface FormFieldSig {\n Args: FieldArgs;\n Blocks: { default: [id: string]; label: [] };\n}\nclass FormField extends Component<FormFieldSig> {\n findError = (errors: ValidationError[], path: string) => {\n return errors.find((error) => error.path === path)?.message ?? null;\n };\n <template>\n <AuFormRow>\n <WithUniqueId as |id|>\n {{#let (this.findError @errors @name) as |error|}}\n <AuLabel\n for={{id}}\n @required={{@required}}\n @requiredLabel=\"Required\"\n >{{yield to=\"label\"}}</AuLabel>\n {{yield id}}\n {{#if error}}\n <AuPill>{{error}}</AuPill>\n {{/if}}\n {{/let}}\n </WithUniqueId>\n </AuFormRow>\n </template>\n}\n"],"names":["predicateSchema","string","curie","required","literalTripleSchema","object","subject","namedNodeTermSchema","predicate","literalTermSchema","namedNodeTripleSchema","DEFAULT_TRIPLE","sayDataFactory","namedNode","ExternalTripleForm","Component","formElement","setupFormElement","modifier","element","keyDownHandler","event","args","onKeyDown","window","addEventListener","removeEventListener","g","prototype","localCopy","i","tracked","datatypePath","languagePath","termType","selectedTermType","triple","datatype","value","language","termTypes","hasLanguage","Boolean","currentFormData","get","toString","length","hasDatatype","selectTermType","errors","extractNamedNode","formData","base","extractLiteral","extractedDatatype","undefined","validateFormData","validated","validateSync","abortEarly","valid","literal","languageOrDataType","e","ValidationError","inner","handleSubmit","preventDefault","FormData","currentTarget","validation","onSubmit","handleInput","initAfterInsert","form","onPowerSelectKeydown","_select","setComponentTemplate","precompileTemplate","strictMode","scope","on","StringField","TermTypeSelectField","eq","FormField","AuInput","templateOnly","SelectField","onChange","selection","select","PowerSelect","findError","path","find","error","message","AuFormRow","WithUniqueId","AuLabel","AuPill"],"mappings":"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"}
@@ -47,7 +47,7 @@ class ImportedResourceLinkerCard extends Component {
47
47
  this.controller?.withTransaction(tr => tr.setNodeAttribute(this.args.node.pos, 'importedResources', newImported));
48
48
  };
49
49
  static {
50
- setComponentTemplate(precompileTemplate("\n {{#if this.importedResources}}\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\">Imported resource linker</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--small\">\n <AuList @divider={{true}} as |Item|>\n {{#each-in this.importedResources as |imported linked|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n {{imported}}\n <AuDropdown @icon={{if linked ChevronDownIcon PlusIcon}} @title={{linked}} role=\"menu\" @alignment=\"left\">\n {{#each this.allResources as |res|}}\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.linkImportedResource imported res)}}>\n {{res}}\n </AuButton>\n {{/each}}\n </AuDropdown>\n </Item>\n {{/each-in}}\n </AuList>\n </c.content>\n </AuCard>\n {{/if}}\n ", {
50
+ setComponentTemplate(precompileTemplate("\n {{#if this.importedResources}}\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\">Imported resource linker</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--small\">\n <AuList @divider={{true}} as |Item|>\n {{#each-in this.importedResources as |imported linked|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n {{imported}}\n <AuDropdown @icon={{if linked ChevronDownIcon PlusIcon}} @title={{linked}} role=\"menu\" @alignment=\"left\">\n {{#each this.allResources as |res|}}\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.linkImportedResource imported res)}}>\n {{res}}\n </AuButton>\n {{/each}}\n </AuDropdown>\n </Item>\n {{/each-in}}\n </AuList>\n </c.content>\n </AuCard>\n {{/if}}\n ", {
51
51
  strictMode: true,
52
52
  scope: () => ({
53
53
  AuCard,
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../../../src/components/_private/imported-resource-linker/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport { localCopy } from 'tracked-toolbox';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ChevronDownIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-down';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport type SayController from '#root/core/say-controller.ts';\nimport { getSubjects } from '#root/plugins/rdfa-info/utils.ts';\n\ntype Signature = {\n Args: {\n node: ResolvedPNode;\n controller: SayController;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n };\n};\n\nexport default class ImportedResourceLinkerCard extends Component<Signature> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node.value;\n }\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n get allResources(): string[] {\n if (!this.controller) {\n return [];\n }\n return getSubjects(this.controller.mainEditorState);\n }\n\n get importedResources(): Record<string, string | undefined> | undefined {\n return this.node.attrs['importedResources'] as\n | Record<string, string | undefined>\n | undefined;\n }\n\n linkImportedResource = (imported: string, linked: string) => {\n const newImported = {\n ...this.importedResources,\n [imported]: linked,\n };\n this.controller?.withTransaction((tr) =>\n tr.setNodeAttribute(this.args.node.pos, 'importedResources', newImported),\n );\n };\n\n <template>\n {{#if this.importedResources}}\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\">Imported resource linker</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--small\">\n <AuList @divider={{true}} as |Item|>\n {{#each-in this.importedResources as |imported linked|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n {{imported}}\n <AuDropdown\n @icon={{if linked ChevronDownIcon PlusIcon}}\n @title={{linked}}\n role=\"menu\"\n @alignment=\"left\"\n >\n {{#each this.allResources as |res|}}\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.linkImportedResource imported res)}}\n >\n {{res}}\n </AuButton>\n {{/each}}\n </AuDropdown>\n </Item>\n {{/each-in}}\n </AuList>\n </c.content>\n </AuCard>\n {{/if}}\n </template>\n}\n"],"names":["ImportedResourceLinkerCard","Component","g","prototype","localCopy","i","void 0","controller","args","node","value","toggleSection","expanded","onToggle","allResources","getSubjects","mainEditorState","importedResources","attrs","linkImportedResource","imported","linked","newImported","withTransaction","tr","setNodeAttribute","pos","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","AuList","AuDropdown","ChevronDownIcon","PlusIcon","AuButton","PencilIcon","on","fn"],"mappings":";;;;;;;;;;;;;;;;;AAyBe,MAAMA,mCAAmCC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC/DC,UAAU,eAAA,EAAiB,IAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;EAE5B,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIE,IAAAA,GAAO;AACT,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,IAAI,CAACC,KAAK;AAC7B,EAAA;EAEAC,aAAA,GAAgBA,MAAA;AACd,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;IAC9B,IAAI,CAACJ,IAAI,CAACK,QAAQ,GAAG,IAAI,CAACD,QAAQ,CAAA;EACpC,CAAA;EAEA,IAAIE,YAAAA,GAAyB;AAC3B,IAAA,IAAI,CAAC,IAAI,CAACP,UAAU,EAAE;AACpB,MAAA,OAAO,EAAE;AACX,IAAA;AACA,IAAA,OAAOQ,WAAA,CAAY,IAAI,CAACR,UAAU,CAACS,eAAe,CAAA;AACpD,EAAA;EAEA,IAAIC,iBAAAA,GAAoE;AACtE,IAAA,OAAO,IAAI,CAACR,IAAI,CAACS,KAAK,CAAC,mBAAA,CAAoB;AAG7C,EAAA;AAEAC,EAAAA,oBAAA,GAAuBA,CAACC,QAAgB,EAAEC,MAAc,KAAA;AACtD,IAAA,MAAMC,WAAA,GAAc;MAClB,GAAG,IAAI,CAACL,iBAAiB;AACzB,MAAA,CAACG,WAAWC;KACd;IACA,IAAI,CAACd,UAAU,EAAEgB,eAAA,CAAiBC,MAChCA,EAAA,CAAGC,gBAAgB,CAAC,IAAI,CAACjB,IAAI,CAACC,IAAI,CAACiB,GAAG,EAAE,mBAAA,EAAqBJ,WAAA,CAAA,CAAA;EAEjE,CAAA;AAEA,EAAA;IAAAK,oBAAA,CAAAC,kBAAA,CAAA,2qCAAA,EA2CA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;QAAAC,MAAA;QAAAC,UAAA;QAAAC,eAAA;QAAAC,QAAA;QAAAC,QAAA;QAAAC,UAAA;QAAAC,EAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"card.js","sources":["../../../../src/components/_private/imported-resource-linker/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport { localCopy } from 'tracked-toolbox';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ChevronDownIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-down';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport type SayController from '#root/core/say-controller.ts';\nimport { getSubjects } from '#root/plugins/rdfa-info/utils.ts';\n\ntype Signature = {\n Args: {\n node: ResolvedPNode;\n controller: SayController;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n };\n};\n\nexport default class ImportedResourceLinkerCard extends Component<Signature> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node.value;\n }\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n get allResources(): string[] {\n if (!this.controller) {\n return [];\n }\n return getSubjects(this.controller.mainEditorState);\n }\n\n get importedResources(): Record<string, string | undefined> | undefined {\n return this.node.attrs['importedResources'] as\n | Record<string, string | undefined>\n | undefined;\n }\n\n linkImportedResource = (imported: string, linked: string) => {\n const newImported = {\n ...this.importedResources,\n [imported]: linked,\n };\n this.controller?.withTransaction((tr) =>\n tr.setNodeAttribute(this.args.node.pos, 'importedResources', newImported),\n );\n };\n\n <template>\n {{#if this.importedResources}}\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\">Imported resource linker</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--small\">\n <AuList @divider={{true}} as |Item|>\n {{#each-in this.importedResources as |imported linked|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n {{imported}}\n <AuDropdown\n @icon={{if linked ChevronDownIcon PlusIcon}}\n @title={{linked}}\n role=\"menu\"\n @alignment=\"left\"\n >\n {{#each this.allResources as |res|}}\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.linkImportedResource imported res)}}\n >\n {{res}}\n </AuButton>\n {{/each}}\n </AuDropdown>\n </Item>\n {{/each-in}}\n </AuList>\n </c.content>\n </AuCard>\n {{/if}}\n </template>\n}\n"],"names":["ImportedResourceLinkerCard","Component","g","prototype","localCopy","i","controller","args","node","value","toggleSection","expanded","onToggle","allResources","getSubjects","mainEditorState","importedResources","attrs","linkImportedResource","imported","linked","newImported","withTransaction","tr","setNodeAttribute","pos","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","AuList","AuDropdown","ChevronDownIcon","PlusIcon","AuButton","PencilIcon","on","fn"],"mappings":";;;;;;;;;;;;;;;;;AAyBe,MAAMA,mCAAmCC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC/DC,UAAU,eAAA,EAAiB,IAAA,CAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAE5B,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIE,IAAAA,GAAO;AACT,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,IAAI,CAACC,KAAK;AAC7B,EAAA;EAEAC,aAAA,GAAgBA,MAAA;AACd,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;IAC9B,IAAI,CAACJ,IAAI,CAACK,QAAQ,GAAG,IAAI,CAACD,QAAQ,CAAA;EACpC,CAAA;EAEA,IAAIE,YAAAA,GAAyB;AAC3B,IAAA,IAAI,CAAC,IAAI,CAACP,UAAU,EAAE;AACpB,MAAA,OAAO,EAAE;AACX,IAAA;AACA,IAAA,OAAOQ,WAAA,CAAY,IAAI,CAACR,UAAU,CAACS,eAAe,CAAA;AACpD,EAAA;EAEA,IAAIC,iBAAAA,GAAoE;AACtE,IAAA,OAAO,IAAI,CAACR,IAAI,CAACS,KAAK,CAAC,mBAAA,CAAoB;AAG7C,EAAA;AAEAC,EAAAA,oBAAA,GAAuBA,CAACC,QAAgB,EAAEC,MAAc,KAAA;AACtD,IAAA,MAAMC,WAAA,GAAc;MAClB,GAAG,IAAI,CAACL,iBAAiB;AACzB,MAAA,CAACG,WAAWC;KACd;IACA,IAAI,CAACd,UAAU,EAAEgB,eAAA,CAAiBC,MAChCA,EAAA,CAAGC,gBAAgB,CAAC,IAAI,CAACjB,IAAI,CAACC,IAAI,CAACiB,GAAG,EAAE,mBAAA,EAAqBJ,WAAA,CAAA,CAAA;EAEjE,CAAA;AAEA,EAAA;IAAAK,oBAAA,CAAAC,kBAAA,CAAA,ssCAAA,EA4CA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;QAAAC,MAAA;QAAAC,UAAA;QAAAC,eAAA;QAAAC,QAAA;QAAAC,QAAA;QAAAC,UAAA;QAAAC,EAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -18,7 +18,7 @@ class NodeControlsCard extends Component {
18
18
  this.args.onToggle?.(this.expanded);
19
19
  };
20
20
  static {
21
- setComponentTemplate(precompileTemplate("\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\">Node controls</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <WrappingUtils @controller={{@controller}} />\n {{#if @node}}\n <RemoveNodeButton @node={{@node}} @controller={{@controller}} />\n {{/if}}\n </c.content>\n </AuCard>\n ", {
21
+ setComponentTemplate(precompileTemplate("\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\">Node controls</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <WrappingUtils @controller={{@controller}} />\n {{#if @node}}\n <RemoveNodeButton @node={{@node}} @controller={{@controller}} />\n {{/if}}\n </c.content>\n </AuCard>\n ", {
22
22
  strictMode: true,
23
23
  scope: () => ({
24
24
  AuCard,
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../../../src/components/_private/node-controls/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport { localCopy } from 'tracked-toolbox';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport type SayController from '#root/core/say-controller.ts';\nimport WrappingUtils from './wrapping-utils.gts';\nimport RemoveNodeButton from './remove-node.gts';\n\ntype Signature = {\n Args: {\n controller: SayController;\n node?: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n };\n};\n\nexport default class NodeControlsCard extends Component<Signature> {\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 <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\">Node controls</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <WrappingUtils @controller={{@controller}} />\n {{#if @node}}\n <RemoveNodeButton @node={{@node}} @controller={{@controller}} />\n {{/if}}\n </c.content>\n </AuCard>\n </template>\n}\n"],"names":["NodeControlsCard","Component","g","prototype","localCopy","i","void 0","toggleSection","expanded","args","onToggle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","WrappingUtils","RemoveNodeButton"],"mappings":";;;;;;;;;;AAkBe,MAAMA,yBAAyBC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CACrDC,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,ogBAAA,EAmBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;QAAAC,aAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"card.js","sources":["../../../../src/components/_private/node-controls/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport { localCopy } from 'tracked-toolbox';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport type SayController from '#root/core/say-controller.ts';\nimport WrappingUtils from './wrapping-utils.gts';\nimport RemoveNodeButton from './remove-node.gts';\n\ntype Signature = {\n Args: {\n controller: SayController;\n node?: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n };\n};\n\nexport default class NodeControlsCard extends Component<Signature> {\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 <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\">Node controls</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <WrappingUtils @controller={{@controller}} />\n {{#if @node}}\n <RemoveNodeButton @node={{@node}} @controller={{@controller}} />\n {{/if}}\n </c.content>\n </AuCard>\n </template>\n}\n"],"names":["NodeControlsCard","Component","g","prototype","localCopy","i","toggleSection","expanded","args","onToggle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","WrappingUtils","RemoveNodeButton"],"mappings":";;;;;;;;;;AAkBe,MAAMA,yBAAyBC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CACrDC,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,+hBAAA,EAoBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;QAAAC,aAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-node.js","sources":["../../../../src/components/_private/node-controls/remove-node.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { AlertTriangleIcon } from '@appuniversum/ember-appuniversum/components/icons/alert-triangle';\n\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport { not } from 'ember-truth-helpers';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\n\ntype Args = {\n node: ResolvedPNode;\n controller: SayController;\n};\n\nexport default class RemoveNodeButton extends Component<Args> {\n AlertTriangleIcon = AlertTriangleIcon;\n\n @tracked showDialog = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n showConfirmationDialog = () => {\n this.showDialog = true;\n };\n\n closeConfirmationDialog = () => {\n this.showDialog = false;\n };\n\n confirmDelete = () => {\n this.deleteNode();\n this.closeConfirmationDialog();\n };\n\n deleteNode = () => {\n this.controller.withTransaction((tr) => {\n return tr.deleteRange(\n this.node.pos,\n this.node.pos + this.node.value.nodeSize,\n );\n });\n };\n\n get enabled() {\n return this.args.node.pos !== -1;\n }\n\n <template>\n <AuButton\n @width=\"block\"\n @alert={{true}}\n {{on \"click\" this.showConfirmationDialog}}\n @disabled={{not this.enabled}}\n >\n Remove node\n </AuButton>\n <AuModal\n @title=\"Delete RDFA Node\"\n @modalOpen={{this.showDialog}}\n @closeModal={{this.closeConfirmationDialog}}\n as |Modal|\n >\n <Modal.Body>\n <AuAlert\n @title=\"Delete RDFA node\"\n @skin=\"warning\"\n @icon={{this.AlertTriangleIcon}}\n >\n Are you sure you want to delete this RDFA node?\n </AuAlert>\n </Modal.Body>\n\n <Modal.Footer>\n <AuButtonGroup>\n <AuButton {{on \"click\" this.confirmDelete}} @skin=\"primary\">\n Yes\n </AuButton>\n <AuButton\n {{on \"click\" this.closeConfirmationDialog}}\n @skin=\"secondary\"\n >\n No\n </AuButton>\n </AuButtonGroup>\n </Modal.Footer>\n </AuModal>\n </template>\n}\n"],"names":["RemoveNodeButton","Component","AlertTriangleIcon","g","prototype","tracked","i","void 0","controller","args","node","showConfirmationDialog","showDialog","closeConfirmationDialog","confirmDelete","deleteNode","withTransaction","tr","deleteRange","pos","value","nodeSize","enabled","setComponentTemplate","precompileTemplate","strictMode","scope","AuButton","not","on","AuModal","AuAlert","AuButtonGroup"],"mappings":";;;;;;;;;;;;;AAkBe,MAAMA,yBAAyBC,SAAA,CAAU;AACtDC,EAAAA,iBAAA,GAAoBA,iBAAA;AAAkB,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,YAAA,EAAA,CAErCC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAAqB,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,WAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAAC,MAAA;EAEtB,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIE,IAAAA,GAAO;AACT,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,IAAI;AACvB,EAAA;EAEAC,sBAAA,GAAyBA,MAAA;IACvB,IAAI,CAACC,UAAU,GAAG,IAAA;EACpB,CAAA;EAEAC,uBAAA,GAA0BA,MAAA;IACxB,IAAI,CAACD,UAAU,GAAG,KAAA;EACpB,CAAA;EAEAE,aAAA,GAAgBA,MAAA;IACd,IAAI,CAACC,UAAU,EAAA;IACf,IAAI,CAACF,uBAAuB,EAAA;EAC9B,CAAA;EAEAE,UAAA,GAAaA,MAAA;AACX,IAAA,IAAI,CAACP,UAAU,CAACQ,eAAe,CAAEC,EAAA,IAAA;MAC/B,OAAOA,EAAA,CAAGC,WAAW,CACnB,IAAI,CAACR,IAAI,CAACS,GAAG,EACb,IAAI,CAACT,IAAI,CAACS,GAAG,GAAG,IAAI,CAACT,IAAI,CAACU,KAAK,CAACC,QAAQ,CAAA;AAE5C,IAAA,CAAA,CAAA;EACF,CAAA;EAEA,IAAIC,OAAAA,GAAU;IACZ,OAAO,IAAI,CAACb,IAAI,CAACC,IAAI,CAACS,GAAG,KAAK,EAAC;AACjC,EAAA;AAEA,EAAA;IAAAI,oBAAA,CAAAC,kBAAA,CAAA,w2BAAA,EAuCA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAAC,GAAA;QAAAC,EAAA;QAAAC,OAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"remove-node.js","sources":["../../../../src/components/_private/node-controls/remove-node.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { AlertTriangleIcon } from '@appuniversum/ember-appuniversum/components/icons/alert-triangle';\n\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport { not } from 'ember-truth-helpers';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\n\ntype Args = {\n node: ResolvedPNode;\n controller: SayController;\n};\n\nexport default class RemoveNodeButton extends Component<Args> {\n AlertTriangleIcon = AlertTriangleIcon;\n\n @tracked showDialog = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n showConfirmationDialog = () => {\n this.showDialog = true;\n };\n\n closeConfirmationDialog = () => {\n this.showDialog = false;\n };\n\n confirmDelete = () => {\n this.deleteNode();\n this.closeConfirmationDialog();\n };\n\n deleteNode = () => {\n this.controller.withTransaction((tr) => {\n return tr.deleteRange(\n this.node.pos,\n this.node.pos + this.node.value.nodeSize,\n );\n });\n };\n\n get enabled() {\n return this.args.node.pos !== -1;\n }\n\n <template>\n <AuButton\n @width=\"block\"\n @alert={{true}}\n {{on \"click\" this.showConfirmationDialog}}\n @disabled={{not this.enabled}}\n >\n Remove node\n </AuButton>\n <AuModal\n @title=\"Delete RDFA Node\"\n @modalOpen={{this.showDialog}}\n @closeModal={{this.closeConfirmationDialog}}\n as |Modal|\n >\n <Modal.Body>\n <AuAlert\n @title=\"Delete RDFA node\"\n @skin=\"warning\"\n @icon={{this.AlertTriangleIcon}}\n >\n Are you sure you want to delete this RDFA node?\n </AuAlert>\n </Modal.Body>\n\n <Modal.Footer>\n <AuButtonGroup>\n <AuButton {{on \"click\" this.confirmDelete}} @skin=\"primary\">\n Yes\n </AuButton>\n <AuButton\n {{on \"click\" this.closeConfirmationDialog}}\n @skin=\"secondary\"\n >\n No\n </AuButton>\n </AuButtonGroup>\n </Modal.Footer>\n </AuModal>\n </template>\n}\n"],"names":["RemoveNodeButton","Component","AlertTriangleIcon","g","prototype","tracked","i","controller","args","node","showConfirmationDialog","showDialog","closeConfirmationDialog","confirmDelete","deleteNode","withTransaction","tr","deleteRange","pos","value","nodeSize","enabled","setComponentTemplate","precompileTemplate","strictMode","scope","AuButton","not","on","AuModal","AuAlert","AuButtonGroup"],"mappings":";;;;;;;;;;;;;AAkBe,MAAMA,yBAAyBC,SAAA,CAAU;AACtDC,EAAAA,iBAAA,GAAoBA,iBAAA;AAAkB,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,YAAA,EAAA,CAErCC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAAqB,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,WAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,MAAA;EAEtB,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIE,IAAAA,GAAO;AACT,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,IAAI;AACvB,EAAA;EAEAC,sBAAA,GAAyBA,MAAA;IACvB,IAAI,CAACC,UAAU,GAAG,IAAA;EACpB,CAAA;EAEAC,uBAAA,GAA0BA,MAAA;IACxB,IAAI,CAACD,UAAU,GAAG,KAAA;EACpB,CAAA;EAEAE,aAAA,GAAgBA,MAAA;IACd,IAAI,CAACC,UAAU,EAAA;IACf,IAAI,CAACF,uBAAuB,EAAA;EAC9B,CAAA;EAEAE,UAAA,GAAaA,MAAA;AACX,IAAA,IAAI,CAACP,UAAU,CAACQ,eAAe,CAAEC,EAAA,IAAA;MAC/B,OAAOA,EAAA,CAAGC,WAAW,CACnB,IAAI,CAACR,IAAI,CAACS,GAAG,EACb,IAAI,CAACT,IAAI,CAACS,GAAG,GAAG,IAAI,CAACT,IAAI,CAACU,KAAK,CAACC,QAAQ,CAAA;AAE5C,IAAA,CAAA,CAAA;EACF,CAAA;EAEA,IAAIC,OAAAA,GAAU;IACZ,OAAO,IAAI,CAACb,IAAI,CAACC,IAAI,CAACS,GAAG,KAAK,EAAC;AACjC,EAAA;AAEA,EAAA;IAAAI,oBAAA,CAAAC,kBAAA,CAAA,w2BAAA,EAuCA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAAC,GAAA;QAAAC,EAAA;QAAAC,OAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -10,7 +10,7 @@ import '../../../utils/_private/constants.js';
10
10
  import 'uuid';
11
11
  import 'relative-to-absolute-iri';
12
12
  import 'rdf-data-factory';
13
- import '../../../main-CBbqRlCI.js';
13
+ import '../../../main-dUbkrxFL.js';
14
14
  import '../../../config/rdfa.js';
15
15
  import 'iter-tools';
16
16
  import { wrapResource } from '../../../commands/_private/rdfa-commands/wrap-resource.js';