@semiont/react-ui 0.4.15 → 0.4.17

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 (136) hide show
  1. package/dist/{KnowledgeBaseSessionContext-CpYaCbnC.d.mts → KnowledgeBaseSessionContext-BNNunwzO.d.mts} +2 -1
  2. package/dist/{ar-R4CRNXEF.mjs → ar-3W37O3R3.mjs} +9 -3
  3. package/dist/ar-3W37O3R3.mjs.map +1 -0
  4. package/dist/{bn-CZKGRHTA.mjs → bn-JZTJLMVE.mjs} +9 -3
  5. package/dist/bn-JZTJLMVE.mjs.map +1 -0
  6. package/dist/{chunk-R2U7P4TK.mjs → chunk-FAI3S4BM.mjs} +34 -34
  7. package/dist/chunk-FAI3S4BM.mjs.map +1 -0
  8. package/dist/{chunk-HVMAGUFA.mjs → chunk-NOD3NCXE.mjs} +3 -1
  9. package/dist/chunk-NOD3NCXE.mjs.map +1 -0
  10. package/dist/{cs-4WIB2IHH.mjs → cs-XYHH7HNE.mjs} +9 -3
  11. package/dist/cs-XYHH7HNE.mjs.map +1 -0
  12. package/dist/{da-JWYEUYPX.mjs → da-MZKIECVT.mjs} +9 -3
  13. package/dist/da-MZKIECVT.mjs.map +1 -0
  14. package/dist/{de-GWUQZGER.mjs → de-AYXTMRQW.mjs} +9 -3
  15. package/dist/de-AYXTMRQW.mjs.map +1 -0
  16. package/dist/{el-DM2GT7P5.mjs → el-A6CVQWAW.mjs} +9 -3
  17. package/dist/el-A6CVQWAW.mjs.map +1 -0
  18. package/dist/{en-IUV4ZXKH.mjs → en-YPQQBI4T.mjs} +2 -2
  19. package/dist/{es-6LVQIM3D.mjs → es-M2HXLJGT.mjs} +9 -3
  20. package/dist/es-M2HXLJGT.mjs.map +1 -0
  21. package/dist/{fa-IRUJY3QI.mjs → fa-V6JZJDYP.mjs} +9 -3
  22. package/dist/fa-V6JZJDYP.mjs.map +1 -0
  23. package/dist/{fi-53FBOEVT.mjs → fi-ONDTZ5H7.mjs} +9 -3
  24. package/dist/fi-ONDTZ5H7.mjs.map +1 -0
  25. package/dist/{fr-Q5KY7QL6.mjs → fr-PAPV4H4G.mjs} +9 -3
  26. package/dist/fr-PAPV4H4G.mjs.map +1 -0
  27. package/dist/{he-HJNKULBY.mjs → he-F6VTLJLW.mjs} +9 -3
  28. package/dist/he-F6VTLJLW.mjs.map +1 -0
  29. package/dist/{hi-UYZ4X6CR.mjs → hi-CFUAV4BF.mjs} +9 -3
  30. package/dist/hi-CFUAV4BF.mjs.map +1 -0
  31. package/dist/{id-UAQMH6U2.mjs → id-NBKLCCI7.mjs} +9 -3
  32. package/dist/id-NBKLCCI7.mjs.map +1 -0
  33. package/dist/index.d.mts +5 -3
  34. package/dist/index.mjs +268 -240
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/{it-C7QEBNFA.mjs → it-SLSOWVVU.mjs} +9 -3
  37. package/dist/it-SLSOWVVU.mjs.map +1 -0
  38. package/dist/{ja-THS6AOSJ.mjs → ja-L5IG4ECE.mjs} +9 -3
  39. package/dist/ja-L5IG4ECE.mjs.map +1 -0
  40. package/dist/{ko-XKK3TWQG.mjs → ko-QYMTULKK.mjs} +9 -3
  41. package/dist/ko-QYMTULKK.mjs.map +1 -0
  42. package/dist/{ms-GSK7LIF7.mjs → ms-5DGSFKM2.mjs} +9 -3
  43. package/dist/ms-5DGSFKM2.mjs.map +1 -0
  44. package/dist/{nl-KUBWITGY.mjs → nl-VZPCGONO.mjs} +9 -3
  45. package/dist/nl-VZPCGONO.mjs.map +1 -0
  46. package/dist/{no-ECWZUHT6.mjs → no-MF6F352I.mjs} +9 -3
  47. package/dist/no-MF6F352I.mjs.map +1 -0
  48. package/dist/{pl-PLVWSZWS.mjs → pl-WIK72JUO.mjs} +9 -3
  49. package/dist/pl-WIK72JUO.mjs.map +1 -0
  50. package/dist/{pt-AL74ZTKB.mjs → pt-RRP5ZF6A.mjs} +9 -3
  51. package/dist/pt-RRP5ZF6A.mjs.map +1 -0
  52. package/dist/{ro-WTPHLHGS.mjs → ro-XHQLC3T7.mjs} +9 -3
  53. package/dist/ro-XHQLC3T7.mjs.map +1 -0
  54. package/dist/{sv-QCLI7SG4.mjs → sv-EWULDN6E.mjs} +9 -3
  55. package/dist/sv-EWULDN6E.mjs.map +1 -0
  56. package/dist/test-utils.d.mts +1 -1
  57. package/dist/test-utils.mjs +2 -2
  58. package/dist/{th-WCKVZU6U.mjs → th-TGOBHFG4.mjs} +9 -3
  59. package/dist/th-TGOBHFG4.mjs.map +1 -0
  60. package/dist/{tr-2CAFS2XS.mjs → tr-LMMPBMV7.mjs} +9 -3
  61. package/dist/tr-LMMPBMV7.mjs.map +1 -0
  62. package/dist/{uk-TDE4JLCY.mjs → uk-IPGRRJY6.mjs} +9 -3
  63. package/dist/uk-IPGRRJY6.mjs.map +1 -0
  64. package/dist/{vi-KKXZ4PCX.mjs → vi-Q676OJQS.mjs} +9 -3
  65. package/dist/vi-Q676OJQS.mjs.map +1 -0
  66. package/dist/{zh-VH4XN5PV.mjs → zh-F3MTWQDX.mjs} +9 -3
  67. package/dist/zh-F3MTWQDX.mjs.map +1 -0
  68. package/package.json +1 -1
  69. package/src/components/resource/HistoryEvent.tsx +3 -2
  70. package/src/components/resource/__tests__/HistoryEvent.test.tsx +1 -0
  71. package/src/components/resource/event-formatting.ts +36 -0
  72. package/src/components/resource/panels/ResourceInfoPanel.tsx +10 -0
  73. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +23 -0
  74. package/src/features/resource-compose/components/ResourceComposePage.tsx +10 -1
  75. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +2 -0
  76. package/src/styles/features/compose.css +63 -0
  77. package/translations/ar.json +6 -2
  78. package/translations/bn.json +6 -2
  79. package/translations/cs.json +6 -2
  80. package/translations/da.json +6 -2
  81. package/translations/de.json +6 -2
  82. package/translations/el.json +6 -2
  83. package/translations/en.json +2 -0
  84. package/translations/es.json +6 -2
  85. package/translations/fa.json +6 -2
  86. package/translations/fi.json +6 -2
  87. package/translations/fr.json +6 -2
  88. package/translations/he.json +6 -2
  89. package/translations/hi.json +6 -2
  90. package/translations/id.json +6 -2
  91. package/translations/it.json +6 -2
  92. package/translations/ja.json +6 -2
  93. package/translations/ko.json +6 -2
  94. package/translations/ms.json +6 -2
  95. package/translations/nl.json +6 -2
  96. package/translations/no.json +6 -2
  97. package/translations/pl.json +6 -2
  98. package/translations/pt.json +6 -2
  99. package/translations/ro.json +6 -2
  100. package/translations/sv.json +6 -2
  101. package/translations/th.json +6 -2
  102. package/translations/tr.json +6 -2
  103. package/translations/uk.json +6 -2
  104. package/translations/vi.json +6 -2
  105. package/translations/zh.json +6 -2
  106. package/dist/ar-R4CRNXEF.mjs.map +0 -1
  107. package/dist/bn-CZKGRHTA.mjs.map +0 -1
  108. package/dist/chunk-HVMAGUFA.mjs.map +0 -1
  109. package/dist/chunk-R2U7P4TK.mjs.map +0 -1
  110. package/dist/cs-4WIB2IHH.mjs.map +0 -1
  111. package/dist/da-JWYEUYPX.mjs.map +0 -1
  112. package/dist/de-GWUQZGER.mjs.map +0 -1
  113. package/dist/el-DM2GT7P5.mjs.map +0 -1
  114. package/dist/es-6LVQIM3D.mjs.map +0 -1
  115. package/dist/fa-IRUJY3QI.mjs.map +0 -1
  116. package/dist/fi-53FBOEVT.mjs.map +0 -1
  117. package/dist/fr-Q5KY7QL6.mjs.map +0 -1
  118. package/dist/he-HJNKULBY.mjs.map +0 -1
  119. package/dist/hi-UYZ4X6CR.mjs.map +0 -1
  120. package/dist/id-UAQMH6U2.mjs.map +0 -1
  121. package/dist/it-C7QEBNFA.mjs.map +0 -1
  122. package/dist/ja-THS6AOSJ.mjs.map +0 -1
  123. package/dist/ko-XKK3TWQG.mjs.map +0 -1
  124. package/dist/ms-GSK7LIF7.mjs.map +0 -1
  125. package/dist/nl-KUBWITGY.mjs.map +0 -1
  126. package/dist/no-ECWZUHT6.mjs.map +0 -1
  127. package/dist/pl-PLVWSZWS.mjs.map +0 -1
  128. package/dist/pt-AL74ZTKB.mjs.map +0 -1
  129. package/dist/ro-WTPHLHGS.mjs.map +0 -1
  130. package/dist/sv-QCLI7SG4.mjs.map +0 -1
  131. package/dist/th-WCKVZU6U.mjs.map +0 -1
  132. package/dist/tr-2CAFS2XS.mjs.map +0 -1
  133. package/dist/uk-TDE4JLCY.mjs.map +0 -1
  134. package/dist/vi-KKXZ4PCX.mjs.map +0 -1
  135. package/dist/zh-VH4XN5PV.mjs.map +0 -1
  136. /package/dist/{en-IUV4ZXKH.mjs.map → en-YPQQBI4T.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -28,14 +28,14 @@ import {
28
28
  usePreloadTranslations,
29
29
  useToast,
30
30
  useTranslations
31
- } from "./chunk-R2U7P4TK.mjs";
31
+ } from "./chunk-FAI3S4BM.mjs";
32
32
  import {
33
33
  ApiClientProvider,
34
34
  EventBusProvider,
35
35
  useApiClient,
36
36
  useEventBus
37
37
  } from "./chunk-OZICDVH7.mjs";
38
- import "./chunk-HVMAGUFA.mjs";
38
+ import "./chunk-NOD3NCXE.mjs";
39
39
  import {
40
40
  __commonJS,
41
41
  __export,
@@ -30948,6 +30948,19 @@ import { getAnnotationUriFromEvent } from "@semiont/core";
30948
30948
 
30949
30949
  // src/components/resource/event-formatting.ts
30950
30950
  import { getExactText as getExactText2, getTargetSelector as getTargetSelector3 } from "@semiont/api-client";
30951
+ function formatUserId(userId) {
30952
+ if (!userId.startsWith("did:")) return userId;
30953
+ const systemMatch = userId.match(/^did:web:system:(.+)$/);
30954
+ if (systemMatch) {
30955
+ const name3 = systemMatch[1];
30956
+ return name3.charAt(0).toUpperCase() + name3.slice(1);
30957
+ }
30958
+ const userMatch = userId.match(/^did:web:[^:]+:users:(.+)$/);
30959
+ if (userMatch) {
30960
+ return decodeURIComponent(userMatch[1]);
30961
+ }
30962
+ return userId;
30963
+ }
30951
30964
  function formatEventType(type, t12, payload) {
30952
30965
  switch (type) {
30953
30966
  case "yield:created":
@@ -30983,6 +30996,8 @@ function formatEventType(type, t12, payload) {
30983
30996
  case "yield:representation-added":
30984
30997
  case "yield:representation-removed":
30985
30998
  return t12("representationEvent");
30999
+ case "embedding:computed":
31000
+ return t12("embeddingComputed");
30986
31001
  default:
30987
31002
  return type;
30988
31003
  }
@@ -31023,6 +31038,8 @@ function getEventEmoji(type, payload) {
31023
31038
  case "yield:representation-added":
31024
31039
  case "yield:representation-removed":
31025
31040
  return "\u{1F4C4}";
31041
+ case "embedding:computed":
31042
+ return "\u{1F9EE}";
31026
31043
  default:
31027
31044
  return "\u{1F4DD}";
31028
31045
  }
@@ -31246,7 +31263,7 @@ function HistoryEvent({
31246
31263
  displayContent.exact,
31247
31264
  "\u201D"
31248
31265
  ] }) : /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__text", children: displayContent.exact }) : /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__text", children: formatEventType(event.type, t12, event.payload) }),
31249
- event.userId && /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__user", children: event.userId }),
31266
+ event.userId && /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__user", children: formatUserId(event.userId) }),
31250
31267
  /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__timestamp", children: formatRelativeTime(event.timestamp, t12) })
31251
31268
  ] }),
31252
31269
  entityTypes.length > 0 && /* @__PURE__ */ jsx25("div", { className: "semiont-history-event__entity-types", children: entityTypes.map((type) => /* @__PURE__ */ jsx25(
@@ -31262,7 +31279,7 @@ function HistoryEvent({
31262
31279
  /* @__PURE__ */ jsxs17("span", { className: "semiont-history-event__detail", children: [
31263
31280
  t12("user"),
31264
31281
  ": ",
31265
- /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__detail-value", children: creationDetails.userId })
31282
+ /* @__PURE__ */ jsx25("span", { className: "semiont-history-event__detail-value", children: creationDetails.userId ? formatUserId(creationDetails.userId) : "" })
31266
31283
  ] }),
31267
31284
  /* @__PURE__ */ jsxs17("span", { className: "semiont-history-event__detail", children: [
31268
31285
  t12("method"),
@@ -48022,6 +48039,7 @@ function ResourceInfoPanel({
48022
48039
  documentLocale,
48023
48040
  primaryMediaType,
48024
48041
  primaryByteSize,
48042
+ storageUri,
48025
48043
  isArchived = false,
48026
48044
  dateCreated,
48027
48045
  dateModified,
@@ -48051,6 +48069,10 @@ function ResourceInfoPanel({
48051
48069
  primaryByteSize.toLocaleString(),
48052
48070
  " bytes"
48053
48071
  ] })
48072
+ ] }),
48073
+ storageUri && /* @__PURE__ */ jsxs34("div", { children: [
48074
+ /* @__PURE__ */ jsx42("span", { className: "semiont-resource-info-panel__label", children: t12("storageUri") }),
48075
+ /* @__PURE__ */ jsx42("span", { className: "semiont-resource-info-panel__value", children: storageUri })
48054
48076
  ] })
48055
48077
  ] })
48056
48078
  ] }),
@@ -57636,274 +57658,278 @@ function ResourceComposePage({
57636
57658
  gatheredContext.graphContext.connections.map((conn) => /* @__PURE__ */ jsx89("span", { className: "semiont-chip", style: { fontSize: "var(--semiont-text-xs)", padding: "0.125rem 0.5rem", marginRight: "0.25rem" }, children: conn.resourceName }, conn.resourceId))
57637
57659
  ] })
57638
57660
  ] }),
57639
- /* @__PURE__ */ jsx89("div", { className: "semiont-form", children: /* @__PURE__ */ jsxs78("form", { onSubmit: handleSaveResource, className: "semiont-form__fields", children: [
57640
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57641
- /* @__PURE__ */ jsx89("label", { htmlFor: "docName", className: "semiont-form__label", children: t12.resourceName }),
57642
- /* @__PURE__ */ jsx89(
57643
- "input",
57644
- {
57645
- id: "docName",
57646
- type: "text",
57647
- value: newResourceName,
57648
- onChange: (e6) => setNewResourceName(e6.target.value),
57649
- placeholder: t12.resourceNamePlaceholder,
57650
- className: "semiont-input",
57651
- required: true,
57652
- disabled: isCreating
57653
- }
57654
- )
57655
- ] }),
57656
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57657
- /* @__PURE__ */ jsx89("label", { htmlFor: "storagePath", className: "semiont-form__label", children: "Save location" }),
57658
- /* @__PURE__ */ jsxs78("div", { className: "semiont-input-addon", children: [
57659
- /* @__PURE__ */ jsx89("span", { className: "semiont-input-addon__prefix", children: "file://" }),
57661
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form", children: /* @__PURE__ */ jsxs78("form", { onSubmit: handleSaveResource, className: "semiont-form__fields semiont-compose-grid", children: [
57662
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-compose-grid__meta", children: [
57663
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57664
+ /* @__PURE__ */ jsx89("label", { htmlFor: "docName", className: "semiont-form__label", children: t12.resourceName }),
57660
57665
  /* @__PURE__ */ jsx89(
57661
57666
  "input",
57662
57667
  {
57663
- id: "storagePath",
57668
+ id: "docName",
57664
57669
  type: "text",
57665
- value: storagePath,
57666
- onChange: (e6) => setStoragePath(e6.target.value),
57667
- placeholder: "docs/my-resource.md",
57670
+ value: newResourceName,
57671
+ onChange: (e6) => setNewResourceName(e6.target.value),
57672
+ placeholder: t12.resourceNamePlaceholder,
57673
+ className: "semiont-input",
57668
57674
  required: true,
57669
- className: "semiont-input semiont-input--addon",
57670
57675
  disabled: isCreating
57671
57676
  }
57672
57677
  )
57673
- ] })
57674
- ] }),
57675
- (!isReferenceCompletion || selectedEntityTypes.length === 0) && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field semiont-form__entity-types", children: [
57676
- /* @__PURE__ */ jsx89("div", { className: "semiont-form__label", children: t12.entityTypes }),
57677
- /* @__PURE__ */ jsx89(
57678
- "div",
57679
- {
57680
- className: "semiont-form__entity-type-buttons",
57681
- role: "group",
57682
- "aria-describedby": "entity-types-description",
57683
- children: availableEntityTypes.map((type) => {
57684
- const isSelected = selectedEntityTypes.includes(type);
57685
- return /* @__PURE__ */ jsx89(
57686
- "button",
57687
- {
57688
- type: "button",
57689
- onClick: () => {
57690
- setSelectedEntityTypes(
57691
- (prev) => prev.includes(type) ? prev.filter((t13) => t13 !== type) : [...prev, type]
57692
- );
57693
- },
57694
- className: "semiont-form__entity-type-button",
57695
- "data-selected": isSelected,
57696
- disabled: isCreating,
57697
- "aria-pressed": isSelected,
57698
- "aria-label": `${type} entity type, ${isSelected ? "selected" : "not selected"}`,
57699
- children: type
57700
- },
57701
- type
57702
- );
57703
- })
57704
- }
57705
- ),
57706
- selectedEntityTypes.length > 0 && /* @__PURE__ */ jsxs78(
57707
- "div",
57708
- {
57709
- className: "sr-only",
57710
- "aria-live": "polite",
57711
- "aria-atomic": "true",
57712
- children: [
57713
- selectedEntityTypes.length,
57714
- " entity type",
57715
- selectedEntityTypes.length !== 1 ? "s" : "",
57716
- " selected: ",
57717
- selectedEntityTypes.join(", ")
57718
- ]
57719
- }
57720
- )
57721
- ] }),
57722
- isReferenceCompletion && selectedEntityTypes.length > 0 && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field semiont-form__entity-types-display", role: "region", "aria-labelledby": "selected-entity-types-label", children: [
57723
- /* @__PURE__ */ jsx89("h3", { id: "selected-entity-types-label", className: "semiont-form__label", children: t12.entityTypes }),
57724
- /* @__PURE__ */ jsx89("div", { className: "semiont-form__entity-type-tags", role: "list", children: selectedEntityTypes.map((type) => /* @__PURE__ */ jsx89(
57725
- "span",
57726
- {
57727
- role: "listitem",
57728
- className: "semiont-form__entity-type-tag",
57729
- "aria-label": `Entity type: ${type}`,
57730
- children: type
57731
- },
57732
- type
57733
- )) }),
57734
- /* @__PURE__ */ jsx89("p", { className: "semiont-form__helper-text", id: "reference-entity-types-description", children: "These entity types were selected when creating the reference" })
57735
- ] }),
57736
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57737
- /* @__PURE__ */ jsx89("label", { htmlFor: "language-select", className: "semiont-form__label", children: t12.language }),
57738
- /* @__PURE__ */ jsx89(
57739
- "select",
57740
- {
57741
- id: "language-select",
57742
- value: selectedLanguage,
57743
- onChange: (e6) => setSelectedLanguage(e6.target.value),
57744
- disabled: isCreating,
57745
- className: "semiont-select",
57746
- children: LOCALES3.map((lang) => /* @__PURE__ */ jsx89("option", { value: lang.code, children: lang.nativeName }, lang.code))
57747
- }
57748
- )
57749
- ] }),
57750
- !isClone && !isReferenceCompletion && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57751
- /* @__PURE__ */ jsx89("label", { className: "semiont-form__label", children: t12.contentSource }),
57752
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__content-source-toggle", children: [
57753
- /* @__PURE__ */ jsxs78(
57754
- "button",
57755
- {
57756
- type: "button",
57757
- onClick: () => setInputMethod("upload"),
57758
- disabled: isCreating,
57759
- className: "semiont-form__content-source-button",
57760
- "data-active": inputMethod === "upload",
57761
- children: [
57762
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__content-source-icon-wrapper", children: [
57763
- /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-icon", children: "\u{1F4CE}" }),
57764
- /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-label", children: t12.uploadFile })
57765
- ] }),
57766
- /* @__PURE__ */ jsx89("div", { className: "semiont-form__content-source-description", children: t12.uploadFileDescription })
57767
- ]
57768
- }
57769
- ),
57770
- /* @__PURE__ */ jsxs78(
57771
- "button",
57772
- {
57773
- type: "button",
57774
- onClick: () => setInputMethod("write"),
57775
- disabled: isCreating,
57776
- className: "semiont-form__content-source-button",
57777
- "data-active": inputMethod === "write",
57778
- children: [
57779
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__content-source-icon-wrapper", children: [
57780
- /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-icon", children: "\u270D\uFE0F" }),
57781
- /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-label", children: t12.writeContent })
57782
- ] }),
57783
- /* @__PURE__ */ jsx89("div", { className: "semiont-form__content-source-description", children: t12.writeContentDescription })
57784
- ]
57785
- }
57786
- )
57787
- ] })
57788
- ] }),
57789
- !isClone && !isReferenceCompletion && inputMethod === "upload" && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__upload-section", children: [
57790
- /* @__PURE__ */ jsx89("div", { children: /* @__PURE__ */ jsxs78("div", { className: "semiont-form__upload-container", children: [
57791
- /* @__PURE__ */ jsx89("label", { className: "semiont-form__upload-dropzone", children: /* @__PURE__ */ jsxs78("div", { className: "semiont-form__upload-area", children: [
57678
+ ] }),
57679
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57680
+ /* @__PURE__ */ jsx89("label", { htmlFor: "storagePath", className: "semiont-form__label", children: "Save location" }),
57681
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-input-addon", children: [
57682
+ /* @__PURE__ */ jsx89("span", { className: "semiont-input-addon__prefix", children: "file://" }),
57792
57683
  /* @__PURE__ */ jsx89(
57793
57684
  "input",
57794
57685
  {
57795
- type: "file",
57796
- accept: "text/plain,text/markdown,image/png,image/jpeg,application/pdf",
57797
- onChange: handleFileUpload,
57798
- className: "semiont-form__upload-input",
57686
+ id: "storagePath",
57687
+ type: "text",
57688
+ value: storagePath,
57689
+ onChange: (e6) => setStoragePath(e6.target.value),
57690
+ placeholder: "docs/my-resource.md",
57691
+ required: true,
57692
+ className: "semiont-input semiont-input--addon",
57799
57693
  disabled: isCreating
57800
57694
  }
57801
- ),
57802
- /* @__PURE__ */ jsx89("p", { className: "semiont-form__upload-text", children: uploadedFile ? uploadedFile.name : t12.dropFileOrClick }),
57803
- /* @__PURE__ */ jsx89("p", { className: "semiont-form__upload-hint", children: t12.supportedFormats })
57804
- ] }) }),
57805
- uploadedFile && /* @__PURE__ */ jsx89(
57806
- "button",
57807
- {
57808
- type: "button",
57809
- onClick: () => {
57810
- setUploadedFile(null);
57811
- setFilePreviewUrl(null);
57812
- setFileMimeType("text/markdown");
57813
- },
57814
- className: "semiont-button semiont-button--danger semiont-button--small",
57815
- disabled: isCreating,
57816
- children: "Clear"
57817
- }
57818
- )
57819
- ] }) }),
57820
- uploadedFile && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__media-type", children: [
57821
- /* @__PURE__ */ jsxs78("span", { className: "semiont-form__media-type-label", children: [
57822
- t12.mediaType,
57823
- ":"
57824
- ] }),
57825
- /* @__PURE__ */ jsx89("code", { className: "semiont-form__media-type-value", children: fileMimeType }),
57826
- /* @__PURE__ */ jsx89("span", { className: "semiont-form__media-type-lock", title: t12.autoDetected, children: "\u{1F512}" })
57695
+ )
57696
+ ] })
57827
57697
  ] }),
57828
- uploadedFile && filePreviewUrl && isImageMimeType(fileMimeType) && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__image-preview", children: [
57829
- /* @__PURE__ */ jsx89("p", { className: "semiont-form__image-preview-label", children: "Preview:" }),
57830
- /* @__PURE__ */ jsx89("div", { className: "semiont-form__image-preview-container", children: /* @__PURE__ */ jsx89(
57831
- "img",
57698
+ (!isReferenceCompletion || selectedEntityTypes.length === 0) && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field semiont-form__entity-types", children: [
57699
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form__label", children: t12.entityTypes }),
57700
+ /* @__PURE__ */ jsx89(
57701
+ "div",
57832
57702
  {
57833
- src: filePreviewUrl,
57834
- alt: "Upload preview",
57835
- className: "semiont-form__image-preview-img"
57703
+ className: "semiont-form__entity-type-buttons",
57704
+ role: "group",
57705
+ "aria-describedby": "entity-types-description",
57706
+ children: availableEntityTypes.map((type) => {
57707
+ const isSelected = selectedEntityTypes.includes(type);
57708
+ return /* @__PURE__ */ jsx89(
57709
+ "button",
57710
+ {
57711
+ type: "button",
57712
+ onClick: () => {
57713
+ setSelectedEntityTypes(
57714
+ (prev) => prev.includes(type) ? prev.filter((t13) => t13 !== type) : [...prev, type]
57715
+ );
57716
+ },
57717
+ className: "semiont-form__entity-type-button",
57718
+ "data-selected": isSelected,
57719
+ disabled: isCreating,
57720
+ "aria-pressed": isSelected,
57721
+ "aria-label": `${type} entity type, ${isSelected ? "selected" : "not selected"}`,
57722
+ children: type
57723
+ },
57724
+ type
57725
+ );
57726
+ })
57836
57727
  }
57837
- ) })
57838
- ] })
57839
- ] }),
57840
- (isClone || isReferenceCompletion || inputMethod === "write") && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__write-section", children: [
57841
- !isClone && !isReferenceCompletion && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57842
- /* @__PURE__ */ jsx89("label", { htmlFor: "format-select", className: "semiont-form__label", children: t12.format }),
57843
- /* @__PURE__ */ jsxs78(
57844
- "select",
57728
+ ),
57729
+ selectedEntityTypes.length > 0 && /* @__PURE__ */ jsxs78(
57730
+ "div",
57845
57731
  {
57846
- id: "format-select",
57847
- value: selectedFormat,
57848
- onChange: (e6) => setSelectedFormat(e6.target.value),
57849
- disabled: isCreating,
57850
- className: "semiont-select",
57732
+ className: "sr-only",
57733
+ "aria-live": "polite",
57734
+ "aria-atomic": "true",
57851
57735
  children: [
57852
- /* @__PURE__ */ jsx89("option", { value: "text/markdown", children: "Markdown (text/markdown)" }),
57853
- /* @__PURE__ */ jsx89("option", { value: "text/plain", children: "Plain Text (text/plain)" }),
57854
- /* @__PURE__ */ jsx89("option", { value: "text/html", children: "HTML (text/html)" })
57736
+ selectedEntityTypes.length,
57737
+ " entity type",
57738
+ selectedEntityTypes.length !== 1 ? "s" : "",
57739
+ " selected: ",
57740
+ selectedEntityTypes.join(", ")
57855
57741
  ]
57856
57742
  }
57857
57743
  )
57858
57744
  ] }),
57859
- /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field semiont-form__editor", children: [
57860
- /* @__PURE__ */ jsx89("label", { className: "semiont-form__label", children: isClone ? t12.resourceContent : t12.content }),
57861
- /* @__PURE__ */ jsx89("div", { className: "semiont-form__editor-wrapper", lang: selectedLanguage, children: /* @__PURE__ */ jsx89(
57862
- CodeMirrorRenderer,
57745
+ isReferenceCompletion && selectedEntityTypes.length > 0 && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field semiont-form__entity-types-display", role: "region", "aria-labelledby": "selected-entity-types-label", children: [
57746
+ /* @__PURE__ */ jsx89("h3", { id: "selected-entity-types-label", className: "semiont-form__label", children: t12.entityTypes }),
57747
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form__entity-type-tags", role: "list", children: selectedEntityTypes.map((type) => /* @__PURE__ */ jsx89(
57748
+ "span",
57863
57749
  {
57864
- content: newResourceContent,
57865
- editable: !isCreating,
57866
- sourceView: true,
57867
- showLineNumbers,
57868
- hoverDelayMs,
57869
- onChange: (newContent) => setNewResourceContent(newContent)
57870
- }
57871
- ) })
57750
+ role: "listitem",
57751
+ className: "semiont-form__entity-type-tag",
57752
+ "aria-label": `Entity type: ${type}`,
57753
+ children: type
57754
+ },
57755
+ type
57756
+ )) }),
57757
+ /* @__PURE__ */ jsx89("p", { className: "semiont-form__helper-text", id: "reference-entity-types-description", children: "These entity types were selected when creating the reference" })
57872
57758
  ] }),
57873
- !isClone && !isReferenceCompletion && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57874
- /* @__PURE__ */ jsx89("label", { htmlFor: "charset-select", className: "semiont-form__label", children: t12.encoding }),
57875
- /* @__PURE__ */ jsxs78(
57759
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57760
+ /* @__PURE__ */ jsx89("label", { htmlFor: "language-select", className: "semiont-form__label", children: t12.language }),
57761
+ /* @__PURE__ */ jsx89(
57876
57762
  "select",
57877
57763
  {
57878
- id: "charset-select",
57879
- value: selectedCharset,
57880
- onChange: (e6) => setSelectedCharset(e6.target.value),
57764
+ id: "language-select",
57765
+ value: selectedLanguage,
57766
+ onChange: (e6) => setSelectedLanguage(e6.target.value),
57881
57767
  disabled: isCreating,
57882
57768
  className: "semiont-select",
57883
- children: [
57884
- /* @__PURE__ */ jsx89("option", { value: "", children: "UTF-8 (default)" }),
57885
- /* @__PURE__ */ jsx89("option", { value: "iso-8859-1", children: "ISO-8859-1 (Latin-1)" }),
57886
- /* @__PURE__ */ jsx89("option", { value: "windows-1252", children: "Windows-1252" }),
57887
- /* @__PURE__ */ jsx89("option", { value: "ascii", children: "ASCII" }),
57888
- /* @__PURE__ */ jsx89("option", { value: "utf-16le", children: "UTF-16LE" })
57889
- ]
57769
+ children: LOCALES3.map((lang) => /* @__PURE__ */ jsx89("option", { value: lang.code, children: lang.nativeName }, lang.code))
57890
57770
  }
57891
57771
  )
57892
57772
  ] })
57893
57773
  ] }),
57894
- isClone && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__checkbox-field", children: [
57895
- /* @__PURE__ */ jsx89(
57896
- "input",
57897
- {
57898
- id: "archiveOriginal",
57899
- type: "checkbox",
57900
- checked: archiveOriginal,
57901
- onChange: (e6) => setArchiveOriginal(e6.target.checked),
57902
- className: "semiont-checkbox",
57903
- disabled: isCreating
57904
- }
57905
- ),
57906
- /* @__PURE__ */ jsx89("label", { htmlFor: "archiveOriginal", className: "semiont-form__checkbox-label", children: t12.archiveOriginal })
57774
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-compose-grid__content", children: [
57775
+ !isClone && !isReferenceCompletion && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57776
+ /* @__PURE__ */ jsx89("label", { className: "semiont-form__label", children: t12.contentSource }),
57777
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__content-source-toggle", children: [
57778
+ /* @__PURE__ */ jsxs78(
57779
+ "button",
57780
+ {
57781
+ type: "button",
57782
+ onClick: () => setInputMethod("upload"),
57783
+ disabled: isCreating,
57784
+ className: "semiont-form__content-source-button",
57785
+ "data-active": inputMethod === "upload",
57786
+ children: [
57787
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__content-source-icon-wrapper", children: [
57788
+ /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-icon", children: "\u{1F4CE}" }),
57789
+ /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-label", children: t12.uploadFile })
57790
+ ] }),
57791
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form__content-source-description", children: t12.uploadFileDescription })
57792
+ ]
57793
+ }
57794
+ ),
57795
+ /* @__PURE__ */ jsxs78(
57796
+ "button",
57797
+ {
57798
+ type: "button",
57799
+ onClick: () => setInputMethod("write"),
57800
+ disabled: isCreating,
57801
+ className: "semiont-form__content-source-button",
57802
+ "data-active": inputMethod === "write",
57803
+ children: [
57804
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__content-source-icon-wrapper", children: [
57805
+ /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-icon", children: "\u270D\uFE0F" }),
57806
+ /* @__PURE__ */ jsx89("span", { className: "semiont-form__content-source-label", children: t12.writeContent })
57807
+ ] }),
57808
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form__content-source-description", children: t12.writeContentDescription })
57809
+ ]
57810
+ }
57811
+ )
57812
+ ] })
57813
+ ] }),
57814
+ !isClone && !isReferenceCompletion && inputMethod === "upload" && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__upload-section", children: [
57815
+ /* @__PURE__ */ jsx89("div", { children: /* @__PURE__ */ jsxs78("div", { className: "semiont-form__upload-container", children: [
57816
+ /* @__PURE__ */ jsx89("label", { className: "semiont-form__upload-dropzone", children: /* @__PURE__ */ jsxs78("div", { className: "semiont-form__upload-area", children: [
57817
+ /* @__PURE__ */ jsx89(
57818
+ "input",
57819
+ {
57820
+ type: "file",
57821
+ accept: "text/plain,text/markdown,image/png,image/jpeg,application/pdf",
57822
+ onChange: handleFileUpload,
57823
+ className: "semiont-form__upload-input",
57824
+ disabled: isCreating
57825
+ }
57826
+ ),
57827
+ /* @__PURE__ */ jsx89("p", { className: "semiont-form__upload-text", children: uploadedFile ? uploadedFile.name : t12.dropFileOrClick }),
57828
+ /* @__PURE__ */ jsx89("p", { className: "semiont-form__upload-hint", children: t12.supportedFormats })
57829
+ ] }) }),
57830
+ uploadedFile && /* @__PURE__ */ jsx89(
57831
+ "button",
57832
+ {
57833
+ type: "button",
57834
+ onClick: () => {
57835
+ setUploadedFile(null);
57836
+ setFilePreviewUrl(null);
57837
+ setFileMimeType("text/markdown");
57838
+ },
57839
+ className: "semiont-button semiont-button--danger semiont-button--small",
57840
+ disabled: isCreating,
57841
+ children: "Clear"
57842
+ }
57843
+ )
57844
+ ] }) }),
57845
+ uploadedFile && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__media-type", children: [
57846
+ /* @__PURE__ */ jsxs78("span", { className: "semiont-form__media-type-label", children: [
57847
+ t12.mediaType,
57848
+ ":"
57849
+ ] }),
57850
+ /* @__PURE__ */ jsx89("code", { className: "semiont-form__media-type-value", children: fileMimeType }),
57851
+ /* @__PURE__ */ jsx89("span", { className: "semiont-form__media-type-lock", title: t12.autoDetected, children: "\u{1F512}" })
57852
+ ] }),
57853
+ uploadedFile && filePreviewUrl && isImageMimeType(fileMimeType) && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__image-preview", children: [
57854
+ /* @__PURE__ */ jsx89("p", { className: "semiont-form__image-preview-label", children: "Preview:" }),
57855
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form__image-preview-container", children: /* @__PURE__ */ jsx89(
57856
+ "img",
57857
+ {
57858
+ src: filePreviewUrl,
57859
+ alt: "Upload preview",
57860
+ className: "semiont-form__image-preview-img"
57861
+ }
57862
+ ) })
57863
+ ] })
57864
+ ] }),
57865
+ (isClone || isReferenceCompletion || inputMethod === "write") && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__write-section", children: [
57866
+ !isClone && !isReferenceCompletion && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57867
+ /* @__PURE__ */ jsx89("label", { htmlFor: "format-select", className: "semiont-form__label", children: t12.format }),
57868
+ /* @__PURE__ */ jsxs78(
57869
+ "select",
57870
+ {
57871
+ id: "format-select",
57872
+ value: selectedFormat,
57873
+ onChange: (e6) => setSelectedFormat(e6.target.value),
57874
+ disabled: isCreating,
57875
+ className: "semiont-select",
57876
+ children: [
57877
+ /* @__PURE__ */ jsx89("option", { value: "text/markdown", children: "Markdown (text/markdown)" }),
57878
+ /* @__PURE__ */ jsx89("option", { value: "text/plain", children: "Plain Text (text/plain)" }),
57879
+ /* @__PURE__ */ jsx89("option", { value: "text/html", children: "HTML (text/html)" })
57880
+ ]
57881
+ }
57882
+ )
57883
+ ] }),
57884
+ /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field semiont-form__editor", children: [
57885
+ /* @__PURE__ */ jsx89("label", { className: "semiont-form__label", children: isClone ? t12.resourceContent : t12.content }),
57886
+ /* @__PURE__ */ jsx89("div", { className: "semiont-form__editor-wrapper", lang: selectedLanguage, children: /* @__PURE__ */ jsx89(
57887
+ CodeMirrorRenderer,
57888
+ {
57889
+ content: newResourceContent,
57890
+ editable: !isCreating,
57891
+ sourceView: true,
57892
+ showLineNumbers,
57893
+ hoverDelayMs,
57894
+ onChange: (newContent) => setNewResourceContent(newContent)
57895
+ }
57896
+ ) })
57897
+ ] }),
57898
+ !isClone && !isReferenceCompletion && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__field", children: [
57899
+ /* @__PURE__ */ jsx89("label", { htmlFor: "charset-select", className: "semiont-form__label", children: t12.encoding }),
57900
+ /* @__PURE__ */ jsxs78(
57901
+ "select",
57902
+ {
57903
+ id: "charset-select",
57904
+ value: selectedCharset,
57905
+ onChange: (e6) => setSelectedCharset(e6.target.value),
57906
+ disabled: isCreating,
57907
+ className: "semiont-select",
57908
+ children: [
57909
+ /* @__PURE__ */ jsx89("option", { value: "", children: "UTF-8 (default)" }),
57910
+ /* @__PURE__ */ jsx89("option", { value: "iso-8859-1", children: "ISO-8859-1 (Latin-1)" }),
57911
+ /* @__PURE__ */ jsx89("option", { value: "windows-1252", children: "Windows-1252" }),
57912
+ /* @__PURE__ */ jsx89("option", { value: "ascii", children: "ASCII" }),
57913
+ /* @__PURE__ */ jsx89("option", { value: "utf-16le", children: "UTF-16LE" })
57914
+ ]
57915
+ }
57916
+ )
57917
+ ] })
57918
+ ] }),
57919
+ isClone && /* @__PURE__ */ jsxs78("div", { className: "semiont-form__checkbox-field", children: [
57920
+ /* @__PURE__ */ jsx89(
57921
+ "input",
57922
+ {
57923
+ id: "archiveOriginal",
57924
+ type: "checkbox",
57925
+ checked: archiveOriginal,
57926
+ onChange: (e6) => setArchiveOriginal(e6.target.checked),
57927
+ className: "semiont-checkbox",
57928
+ disabled: isCreating
57929
+ }
57930
+ ),
57931
+ /* @__PURE__ */ jsx89("label", { htmlFor: "archiveOriginal", className: "semiont-form__checkbox-label", children: t12.archiveOriginal })
57932
+ ] })
57907
57933
  ] }),
57908
57934
  /* @__PURE__ */ jsxs78("div", { className: "semiont-form__actions", children: [
57909
57935
  /* @__PURE__ */ jsx89(
@@ -58760,6 +58786,7 @@ function ResourceViewerPage({
58760
58786
  activePanel,
58761
58787
  theme: theme2,
58762
58788
  showLineNumbers,
58789
+ hoverDelayMs,
58763
58790
  width: activePanel === "jsonld" ? "w-[600px]" : activePanel === "annotations" ? "w-[400px]" : "w-64",
58764
58791
  children: [
58765
58792
  annotateMode && resource.archived && /* @__PURE__ */ jsx92("div", { className: "semiont-document-viewer__archived-status", children: /* @__PURE__ */ jsx92("div", { className: "semiont-document-viewer__archived-text", children: "\u{1F4E6} Archived" }) }),
@@ -58806,6 +58833,7 @@ function ResourceViewerPage({
58806
58833
  documentLocale: getLanguage(resource),
58807
58834
  primaryMediaType,
58808
58835
  primaryByteSize,
58836
+ storageUri: resource.storageUri,
58809
58837
  isArchived: resource.archived ?? false,
58810
58838
  dateCreated: resource.dateCreated,
58811
58839
  dateModified: resource.dateModified,