ocean-brain 0.11.0 → 0.12.0

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 (147) hide show
  1. package/package.json +1 -1
  2. package/server/client/dist/assets/ArrowRight.es-DZTjsBaI.js +1 -0
  3. package/server/client/dist/assets/AuxiliaryPanelHeader-Bp3iRjm6.js +1 -0
  4. package/server/client/dist/assets/Calendar-BLiViCGr.js +25 -0
  5. package/server/client/dist/assets/Callout-Cye6_6BM.js +1 -0
  6. package/server/client/dist/assets/CheckCircle.es-BTloiuti.js +1 -0
  7. package/server/client/dist/assets/Copy.es-CkLUgwY-.js +1 -0
  8. package/server/client/dist/assets/File.es-c83QExqr.js +1 -0
  9. package/server/client/dist/assets/FlowArrow.es-DWiIXWQG.js +1 -0
  10. package/server/client/dist/assets/Graph-jbPLcne9.js +46 -0
  11. package/server/client/dist/assets/Image.es-vY-nTyOe.js +1 -0
  12. package/server/client/dist/assets/Note-BTQLB80Y.js +25 -0
  13. package/server/client/dist/assets/{NotePropertiesPanel-aCKXAe5F.js → NotePropertiesPanel-uO-JKy19.js} +2 -2
  14. package/server/client/dist/assets/Plus.es-CaRgmXc_.js +1 -0
  15. package/server/client/dist/assets/Reminders-BAgZEUwV.js +1 -0
  16. package/server/client/dist/assets/Search-BxozUWkC.js +31 -0
  17. package/server/client/dist/assets/SurfaceCard-BAlcul6z.js +1 -0
  18. package/server/client/dist/assets/Tag-BhCf_mil.js +1 -0
  19. package/server/client/dist/assets/TagNotes-BIzhXqwp.js +1 -0
  20. package/server/client/dist/assets/Trash.es-prxIxo9c.js +1 -0
  21. package/server/client/dist/assets/ViewChip-Cq_YzRvB.js +1 -0
  22. package/server/client/dist/assets/Views-C26uWznP.js +1 -0
  23. package/server/client/dist/assets/{abnfDiagram-VRR7QNED-CWlV5dXw.js → abnfDiagram-VRR7QNED-2cuaaDg0.js} +1 -1
  24. package/server/client/dist/assets/app-CEkicO08.css +1 -0
  25. package/server/client/dist/assets/app-DbQdHfMb.js +139 -0
  26. package/server/client/dist/assets/{arc-BV-n6RUX.js → arc-Cr-oYJoQ.js} +1 -1
  27. package/server/client/dist/assets/{architectureDiagram-ZJ3FMSHR-CekzMXdu.js → architectureDiagram-ZJ3FMSHR-HF8-bEM0.js} +1 -1
  28. package/server/client/dist/assets/{blockDiagram-677ZJIJ3-B49yHoxq.js → blockDiagram-677ZJIJ3-evR8rlpQ.js} +1 -1
  29. package/server/client/dist/assets/{c4Diagram-LMCZKHZV-0AfB9NBC.js → c4Diagram-LMCZKHZV-zCjuWUmC.js} +1 -1
  30. package/server/client/dist/assets/channel-Cq5ZBtfo.js +1 -0
  31. package/server/client/dist/assets/{chunk-2Q5K7J3B-DaPQAU1q.js → chunk-2Q5K7J3B-P0v1gRui.js} +1 -1
  32. package/server/client/dist/assets/{chunk-32BRIVSS-CfL3kZAg.js → chunk-32BRIVSS-102-EyWU.js} +1 -1
  33. package/server/client/dist/assets/{chunk-5VM5RSS4-DeOwWPE_.js → chunk-5VM5RSS4-uqI_1K1p.js} +1 -1
  34. package/server/client/dist/assets/{chunk-EX3LRPZG-C3W1oc9y.js → chunk-EX3LRPZG-k5hlNinR.js} +1 -1
  35. package/server/client/dist/assets/{chunk-JWPE2WC7-_Oqh79OY.js → chunk-JWPE2WC7-PLvgEy_B.js} +1 -1
  36. package/server/client/dist/assets/{chunk-MOJQB5TN-DDKNNzI6.js → chunk-MOJQB5TN-B-LmIwhJ.js} +1 -1
  37. package/server/client/dist/assets/{chunk-RYQCIY6F-DCHah7CC.js → chunk-RYQCIY6F-CaNSMki0.js} +1 -1
  38. package/server/client/dist/assets/{chunk-V7JOEXUC-uUOIzgxj.js → chunk-V7JOEXUC-CmSzAkUx.js} +1 -1
  39. package/server/client/dist/assets/{chunk-VR4S4FIN-DDVw2WPs.js → chunk-VR4S4FIN-IiOfWaBG.js} +1 -1
  40. package/server/client/dist/assets/{chunk-XXDRQBXY-Coo4UFm2.js → chunk-XXDRQBXY-DRXrI6SM.js} +1 -1
  41. package/server/client/dist/assets/classDiagram-OUVF2IWQ-BqUaa8a6.js +1 -0
  42. package/server/client/dist/assets/classDiagram-v2-EOCWNBFH-BqUaa8a6.js +1 -0
  43. package/server/client/dist/assets/{cose-bilkent-JH36ORCC-C3pHmHpD.js → cose-bilkent-JH36ORCC-COcEaZRS.js} +1 -1
  44. package/server/client/dist/assets/{cynefinDiagram-TSTJHNR4-DZ6iiJFo.js → cynefinDiagram-TSTJHNR4-CSHqcg9K.js} +1 -1
  45. package/server/client/dist/assets/{dagre-VKFMJZFB-DNELbhwC.js → dagre-VKFMJZFB-XAWCPOS0.js} +1 -1
  46. package/server/client/dist/assets/{diagram-FQU43EPY-CMEvZJ61.js → diagram-FQU43EPY-scBCDUnE.js} +1 -1
  47. package/server/client/dist/assets/{diagram-G47NLZAW-BYDtf6j9.js → diagram-G47NLZAW-nPKP5kd8.js} +1 -1
  48. package/server/client/dist/assets/{diagram-NH7WQ7WH-CmXfcCQA.js → diagram-NH7WQ7WH-DcWalY4j.js} +1 -1
  49. package/server/client/dist/assets/{diagram-OA4YK3LP-BflTKJxU.js → diagram-OA4YK3LP-CXTlHB5A.js} +4 -4
  50. package/server/client/dist/assets/{diagram-WEI45ONY-KW3fKqna.js → diagram-WEI45ONY-D1uvaJub.js} +1 -1
  51. package/server/client/dist/assets/{ebnfDiagram-CCIWWBDH-CbyhY5Nj.js → ebnfDiagram-CCIWWBDH-nHt3vRNt.js} +1 -1
  52. package/server/client/dist/assets/{erDiagram-Q63AITRT-CC2eZV8g.js → erDiagram-Q63AITRT-K6stUUV2.js} +1 -1
  53. package/server/client/dist/assets/{flowDiagram-23GEKE2U-unplo7Qm.js → flowDiagram-23GEKE2U-DDWtKrEp.js} +4 -4
  54. package/server/client/dist/assets/{ganttDiagram-NO4QXBWP-BcBK5HcZ.js → ganttDiagram-NO4QXBWP-Daqh7b4I.js} +1 -1
  55. package/server/client/dist/assets/{gitGraphDiagram-IHSO6WYX-DgVbbb5k.js → gitGraphDiagram-IHSO6WYX-D73CLkcG.js} +1 -1
  56. package/server/client/dist/assets/{image.api-CyQisInP.js → image.api-Bbwmcw0T.js} +1 -1
  57. package/server/client/dist/assets/index-8bsOoxxg.js +1 -0
  58. package/server/client/dist/assets/{infoDiagram-FWYZ7A6U-N_D9RdfG.js → infoDiagram-FWYZ7A6U-Bc1YI5Iu.js} +1 -1
  59. package/server/client/dist/assets/{ishikawaDiagram-FXEZZL3T-BBKrzmB2.js → ishikawaDiagram-FXEZZL3T-BJDXbmaY.js} +1 -1
  60. package/server/client/dist/assets/{journeyDiagram-5HDEW3XC-NdCxLmQB.js → journeyDiagram-5HDEW3XC-DlyJx4xT.js} +1 -1
  61. package/server/client/dist/assets/{kanban-definition-HUTT4EX6-Ck7t4-tt.js → kanban-definition-HUTT4EX6-AmTeXesc.js} +1 -1
  62. package/server/client/dist/assets/manage-image-DCBgglLx.js +1 -0
  63. package/server/client/dist/assets/manage-image-detail-CPpeRZD4.js +1 -0
  64. package/server/client/dist/assets/{mcp-CCaFd0zm.js → mcp-Y2p95Lm9.js} +1 -1
  65. package/server/client/dist/assets/mcp-admin-adapter-z9OaMVrl.js +1 -0
  66. package/server/client/dist/assets/{mermaid.core-B14ZAmWA.js → mermaid.core-B528P54n.js} +4 -4
  67. package/server/client/dist/assets/{mindmap-definition-LN4V7U3C-BTUqSdcP.js → mindmap-definition-LN4V7U3C-C_6tKVmY.js} +1 -1
  68. package/server/client/dist/assets/{note-ui-CtijppHK.js → note-ui-Cv6quEYh.js} +1 -1
  69. package/server/client/dist/assets/{pegDiagram-2B236MQR-Cjcu3mVz.js → pegDiagram-2B236MQR-CGKCNdrV.js} +1 -1
  70. package/server/client/dist/assets/{pieDiagram-ENE6RG2P-BxI_c22Z.js → pieDiagram-ENE6RG2P-C3cMh7d5.js} +1 -1
  71. package/server/client/dist/assets/{placeholder-AusSo8p9.js → placeholder-CHRQt_T8.js} +1 -1
  72. package/server/client/dist/assets/properties-CwxDtivz.js +1 -0
  73. package/server/client/dist/assets/{quadrantDiagram-ABIIQ3AL-DGm0a-yR.js → quadrantDiagram-ABIIQ3AL-CVVzGxBd.js} +1 -1
  74. package/server/client/dist/assets/{railroadDiagram-RFXS5EU6-DmCDu89O.js → railroadDiagram-RFXS5EU6-wa-4aJR9.js} +1 -1
  75. package/server/client/dist/assets/{requirementDiagram-TGXJPOKE-CBpUt7Ig.js → requirementDiagram-TGXJPOKE-DyuC9W7q.js} +1 -1
  76. package/server/client/dist/assets/route-preload.js +2 -2
  77. package/server/client/dist/assets/{sankeyDiagram-HTMAVEWB-BjGnDZlp.js → sankeyDiagram-HTMAVEWB-B70y-MQg.js} +1 -1
  78. package/server/client/dist/assets/search-DCLnUWYd.js +1 -0
  79. package/server/client/dist/assets/search-admin-adapter-BLMYNm9w.js +1 -0
  80. package/server/client/dist/assets/{sequenceDiagram-DBY2YBRQ-B7rpCfS6.js → sequenceDiagram-DBY2YBRQ-mGkh3IEy.js} +1 -1
  81. package/server/client/dist/assets/{sizeCapture-X5ZJPWSS-CUJhD0uW.js → sizeCapture-X5ZJPWSS-BhnCNP5z.js} +1 -1
  82. package/server/client/dist/assets/sortable.esm-DgSW3bAA.js +5 -0
  83. package/server/client/dist/assets/{stateDiagram-2N3HPSRC-Y9-3XqRX.js → stateDiagram-2N3HPSRC-BqSKSfKi.js} +1 -1
  84. package/server/client/dist/assets/{stateDiagram-v2-6OUMAXLB-DbHXhT02.js → stateDiagram-v2-6OUMAXLB-Wl7lGTf3.js} +1 -1
  85. package/server/client/dist/assets/{swimlanes-5IMT3BWC-Cs1NO9ng.js → swimlanes-5IMT3BWC-CZ7ckdmY.js} +2 -2
  86. package/server/client/dist/assets/swimlanesDiagram-G3AALYLV-BZL3DQ-c.js +8 -0
  87. package/server/client/dist/assets/{tag.api-DNSQpqwk.js → tag.api-bU52U0tT.js} +1 -1
  88. package/server/client/dist/assets/time-DZKkPFUi.js +361 -0
  89. package/server/client/dist/assets/{timeline-definition-FHXFAJF6-8fqD4WNL.js → timeline-definition-FHXFAJF6-C-t9-x4M.js} +3 -3
  90. package/server/client/dist/assets/trash-BNeUFJnC.js +1 -0
  91. package/server/client/dist/assets/{url-9nrbQs7Z.js → url-BvjSC8PU.js} +1 -1
  92. package/server/client/dist/assets/useNoteMutate-VJYw0Vt_.js +9 -0
  93. package/server/client/dist/assets/useReminderMutate-DaO0QssD.js +121 -0
  94. package/server/client/dist/assets/{vennDiagram-L72KCM5P-BPqKkd5a.js → vennDiagram-L72KCM5P-CP014Nl5.js} +1 -1
  95. package/server/client/dist/assets/{wardleyDiagram-EHGQE667-Cq11kU2M.js → wardleyDiagram-EHGQE667-B7Ghd-94.js} +1 -1
  96. package/server/client/dist/assets/{xychartDiagram-FW5EYKEG-DJ6UzFj-.js → xychartDiagram-FW5EYKEG-C4YGS0YJ.js} +1 -1
  97. package/server/client/dist/index.html +6 -6
  98. package/server/dist/features/note/graphql/note.query.resolver.js +27 -9
  99. package/server/dist/features/note/graphql/note.type-defs.js +2 -0
  100. package/server/dist/features/note/services/content-blocks.js +24 -21
  101. package/server/dist/features/reminder/graphql/reminder.query.resolver.js +62 -0
  102. package/server/dist/features/reminder/graphql/reminder.type-defs.js +25 -0
  103. package/server/dist/features/view/graphql/view.query.resolver.js +40 -5
  104. package/server/dist/features/view/graphql/view.type-defs.js +23 -1
  105. package/server/dist/features/view/services/workspace.js +108 -5
  106. package/server/dist/paths.js +0 -1
  107. package/server/dist/routes/client.js +1 -1
  108. package/server/prisma/schema.prisma +1 -0
  109. package/server/client/dist/assets/ArrowRight.es-BEhnlwfe.js +0 -1
  110. package/server/client/dist/assets/AuxiliaryPanelHeader-B1k7pZpn.js +0 -1
  111. package/server/client/dist/assets/Calendar-D7QJsAlg.js +0 -25
  112. package/server/client/dist/assets/Callout-BTd1BYtV.js +0 -1
  113. package/server/client/dist/assets/Copy.es-BoLjilxv.js +0 -1
  114. package/server/client/dist/assets/File.es-Ct7fscBg.js +0 -1
  115. package/server/client/dist/assets/Graph-DYUb7gQb.js +0 -46
  116. package/server/client/dist/assets/Graph-LY_IgMYy.js +0 -1
  117. package/server/client/dist/assets/Image.es-OYyN3BYt.js +0 -1
  118. package/server/client/dist/assets/Note-DsMhwrHw.js +0 -25
  119. package/server/client/dist/assets/PencilLine.es-0JpEgxFY.js +0 -1
  120. package/server/client/dist/assets/Plus.es-DRfLW_bI.js +0 -1
  121. package/server/client/dist/assets/Reminders-COr1OHvF.js +0 -1
  122. package/server/client/dist/assets/Search-Ctkx0BQk.js +0 -31
  123. package/server/client/dist/assets/SurfaceCard-t7pdfhEe.js +0 -1
  124. package/server/client/dist/assets/Tag-BjxtrIQW.js +0 -1
  125. package/server/client/dist/assets/TagNotes-DV_fdRbg.js +0 -1
  126. package/server/client/dist/assets/Trash.es-Bo1VyK9Q.js +0 -1
  127. package/server/client/dist/assets/ViewChip-DlCkL4z4.js +0 -1
  128. package/server/client/dist/assets/ViewNotes-wWWeFJyU.js +0 -1
  129. package/server/client/dist/assets/ViewSectionDialog-DhH8harC.js +0 -102
  130. package/server/client/dist/assets/Views-CWE99SnI.js +0 -1
  131. package/server/client/dist/assets/app-B9WZRrAH.css +0 -1
  132. package/server/client/dist/assets/app-BpSMjzET.js +0 -26
  133. package/server/client/dist/assets/channel-CigOulR-.js +0 -1
  134. package/server/client/dist/assets/classDiagram-OUVF2IWQ-D13ISIOW.js +0 -1
  135. package/server/client/dist/assets/classDiagram-v2-EOCWNBFH-D13ISIOW.js +0 -1
  136. package/server/client/dist/assets/index-B-E1Ilh9.js +0 -1
  137. package/server/client/dist/assets/manage-image-azmo5iVw.js +0 -1
  138. package/server/client/dist/assets/manage-image-detail-BF-uSqb_.js +0 -1
  139. package/server/client/dist/assets/mcp-admin-adapter-PMmgPupc.js +0 -1
  140. package/server/client/dist/assets/note.api-D3oJmG3q.js +0 -356
  141. package/server/client/dist/assets/properties-BrNJLkxR.js +0 -1
  142. package/server/client/dist/assets/search-D-xKTPdO.js +0 -1
  143. package/server/client/dist/assets/search-admin-adapter-CJnJmL6w.js +0 -1
  144. package/server/client/dist/assets/swimlanesDiagram-G3AALYLV-DQnrq2ZC.js +0 -8
  145. package/server/client/dist/assets/time-D5LRMumI.js +0 -9
  146. package/server/client/dist/assets/trash-D4-9sv8q.js +0 -1
  147. package/server/client/dist/assets/useReminderMutate-BrGO9M0o.js +0 -82
@@ -6,6 +6,30 @@ const reminderType = gql`
6
6
  high
7
7
  }
8
8
 
9
+ enum ReminderStatus {
10
+ open
11
+ completed
12
+ }
13
+
14
+ enum ReminderSortBy {
15
+ reminderDate
16
+ updatedAt
17
+ }
18
+
19
+ enum ReminderSortOrder {
20
+ asc
21
+ desc
22
+ }
23
+
24
+ input ReminderFilterInput {
25
+ status: ReminderStatus!
26
+ priority: ReminderPriority
27
+ start: String
28
+ end: String
29
+ sortBy: ReminderSortBy
30
+ sortOrder: ReminderSortOrder
31
+ }
32
+
9
33
  type Reminder {
10
34
  id: ID!
11
35
  noteId: Int!
@@ -26,6 +50,7 @@ const reminderType = gql`
26
50
  const reminderQuery = gql`
27
51
  extend type Query {
28
52
  noteReminders(noteId: ID!, pagination: PaginationInput): Reminders!
53
+ reminders(filter: ReminderFilterInput!, pagination: PaginationInput): Reminders!
29
54
  upcomingReminders(pagination: PaginationInput): Reminders!
30
55
  remindersInDateRange(dateRange: DateRangeInput): [Reminder!]!
31
56
  }
@@ -2,6 +2,7 @@ import { GraphQLError } from "graphql";
2
2
  import { InvalidNotePropertyInputError } from "../../../features/note/services/properties.js";
3
3
  import {
4
4
  getNotesByProperties,
5
+ getViewSectionBoardColumn,
5
6
  getViewSectionById,
6
7
  getViewSectionNotes,
7
8
  getViewWorkspace
@@ -18,17 +19,51 @@ const viewQueryResolvers = {
18
19
  pagination = {
19
20
  limit: 25,
20
21
  offset: 0
21
- }
22
+ },
23
+ sortBy,
24
+ sortOrder
22
25
  }) => {
23
- const sectionNotes = await getViewSectionNotes(id, {
24
- limit: Number(pagination.limit),
25
- offset: Number(pagination.offset)
26
- });
26
+ const sectionNotes = await getViewSectionNotes(
27
+ id,
28
+ {
29
+ limit: Number(pagination.limit),
30
+ offset: Number(pagination.offset)
31
+ },
32
+ { sortBy, sortOrder }
33
+ );
27
34
  if (!sectionNotes) {
28
35
  throw "NOT FOUND";
29
36
  }
30
37
  return sectionNotes;
31
38
  },
39
+ viewSectionBoardColumn: async (_, {
40
+ id,
41
+ optionValue = null,
42
+ pagination = {
43
+ limit: 5,
44
+ offset: 0
45
+ }
46
+ }) => {
47
+ try {
48
+ const columnNotes = await getViewSectionBoardColumn(id, optionValue, {
49
+ limit: Number(pagination.limit),
50
+ offset: Number(pagination.offset)
51
+ });
52
+ if (!columnNotes) {
53
+ throw "NOT FOUND";
54
+ }
55
+ return columnNotes;
56
+ } catch (error) {
57
+ if (error instanceof InvalidNotePropertyInputError) {
58
+ throw new GraphQLError(error.message, {
59
+ extensions: {
60
+ code: "INVALID_NOTE_PROPERTY_INPUT"
61
+ }
62
+ });
63
+ }
64
+ throw error;
65
+ }
66
+ },
32
67
  notesByProperties: async (_, {
33
68
  input,
34
69
  pagination = {
@@ -37,11 +37,25 @@ const viewType = gql`
37
37
 
38
38
  type ViewDisplayOptions {
39
39
  tableColumns: [ViewTableColumn!]!
40
+ tablePropertyKeys: [String!]!
41
+ boardGroupByPropertyKey: String
42
+ }
43
+
44
+ type ViewBoardNote {
45
+ id: ID!
46
+ title: String!
47
+ updatedAt: String!
48
+ }
49
+
50
+ type ViewBoardColumnNotes {
51
+ totalCount: Int!
52
+ notes: [ViewBoardNote!]!
40
53
  }
41
54
 
42
55
  enum ViewDisplayType {
43
56
  list
44
57
  table
58
+ board
45
59
  calendar
46
60
  }
47
61
 
@@ -84,6 +98,8 @@ const viewType = gql`
84
98
 
85
99
  input ViewDisplayOptionsInput {
86
100
  tableColumns: [ViewTableColumn!]
101
+ tablePropertyKeys: [String!]
102
+ boardGroupByPropertyKey: String
87
103
  }
88
104
 
89
105
  input ViewSectionInput {
@@ -110,7 +126,13 @@ const viewQuery = gql`
110
126
  type Query {
111
127
  viewWorkspace: ViewWorkspace!
112
128
  viewSection(id: ID!): ViewSection
113
- viewSectionNotes(id: ID!, pagination: PaginationInput): Notes!
129
+ viewSectionNotes(
130
+ id: ID!
131
+ pagination: PaginationInput
132
+ sortBy: ViewSortBy
133
+ sortOrder: ViewSortOrder
134
+ ): Notes!
135
+ viewSectionBoardColumn(id: ID!, optionValue: String, pagination: PaginationInput): ViewBoardColumnNotes!
114
136
  notesByProperties(input: NotesByPropertiesInput!, pagination: PaginationInput): Notes!
115
137
  }
116
138
  `;
@@ -12,6 +12,7 @@ const MAX_VIEW_SECTION_LIMIT = 20;
12
12
  const DEFAULT_VIEW_NOTES_QUERY_LIMIT = 20;
13
13
  const MAX_VIEW_NOTES_QUERY_LIMIT = 50;
14
14
  const MAX_VIEW_PROPERTY_FILTERS = 10;
15
+ const MAX_VIEW_TABLE_PROPERTY_COLUMNS = 6;
15
16
  const DEFAULT_VIEW_DISPLAY_TYPE = "list";
16
17
  const DEFAULT_VIEW_SORT_BY = "updatedAt";
17
18
  const DEFAULT_VIEW_SORT_ORDER = "desc";
@@ -54,7 +55,7 @@ const isViewTableColumn = (value) => {
54
55
  return value === "title" || value === "tags" || value === "properties" || value === "createdAt" || value === "updatedAt";
55
56
  };
56
57
  const normalizeViewDisplayType = (value) => {
57
- if (value === "table" || value === "calendar") {
58
+ if (value === "table" || value === "board" || value === "calendar") {
58
59
  return value;
59
60
  }
60
61
  return DEFAULT_VIEW_DISPLAY_TYPE;
@@ -73,9 +74,12 @@ const normalizeViewTableColumns = (columns) => {
73
74
  }
74
75
  return uniqueColumns.includes("title") ? uniqueColumns : ["title", ...uniqueColumns];
75
76
  };
77
+ const normalizeViewTablePropertyKeys = (keys) => Array.from(new Set((keys ?? []).map(normalizePropertyKey))).slice(0, MAX_VIEW_TABLE_PROPERTY_COLUMNS);
76
78
  const normalizeViewDisplayOptions = (options) => {
77
79
  return {
78
- tableColumns: normalizeViewTableColumns(options?.tableColumns)
80
+ tableColumns: normalizeViewTableColumns(options?.tableColumns),
81
+ tablePropertyKeys: normalizeViewTablePropertyKeys(options?.tablePropertyKeys),
82
+ boardGroupByPropertyKey: options?.boardGroupByPropertyKey ? normalizePropertyKey(options.boardGroupByPropertyKey) : null
79
83
  };
80
84
  };
81
85
  const normalizeFilterValue = ({
@@ -207,9 +211,16 @@ const normalizeViewSectionInput = (input) => {
207
211
  const sortBy = normalizeViewSortBy(input.sortBy);
208
212
  const sortOrder = normalizeViewSortOrder(input.sortOrder);
209
213
  const displayOptions = normalizeViewDisplayOptions(input.displayOptions);
214
+ const displayType = normalizeViewDisplayType(input.displayType);
215
+ if (displayType === "board" && !displayOptions.boardGroupByPropertyKey) {
216
+ throw new InvalidNotePropertyInputError("Board sections require a grouping property.");
217
+ }
218
+ if (displayType === "board" && propertyFilters.some((filter) => filter.key === displayOptions.boardGroupByPropertyKey)) {
219
+ throw new InvalidNotePropertyInputError("A board grouping property cannot also be used as a section filter.");
220
+ }
210
221
  return {
211
222
  title: trimmedTitle || buildDefaultSectionTitle(tagNames, propertyFilters),
212
- displayType: normalizeViewDisplayType(input.displayType),
223
+ displayType,
213
224
  displayOptions,
214
225
  tagNames,
215
226
  mode: input.mode === "or" ? "or" : "and",
@@ -358,6 +369,23 @@ const hydratePropertyFilters = async (db, filters, options = {}) => {
358
369
  };
359
370
  const buildStoredViewQuery = async (db, section) => {
360
371
  const propertyFilters = await hydratePropertyFilters(db, section.propertyFilters, { validateSelectOptions: true });
372
+ if (section.displayType === "board") {
373
+ const groupingProperty = await db.propertyDefinition.findUnique({
374
+ where: { key: section.displayOptions.boardGroupByPropertyKey ?? "" },
375
+ select: { valueType: true, options: { select: { id: true }, take: 1 } }
376
+ });
377
+ if (!groupingProperty) {
378
+ throw new InvalidNotePropertyInputError(
379
+ `Property ${section.displayOptions.boardGroupByPropertyKey ?? ""} is not defined.`
380
+ );
381
+ }
382
+ if (groupingProperty.valueType !== "select") {
383
+ throw new InvalidNotePropertyInputError("Board sections can only group by a select property.");
384
+ }
385
+ if (groupingProperty.options.length === 0) {
386
+ throw new InvalidNotePropertyInputError("Board grouping properties require at least one option.");
387
+ }
388
+ }
361
389
  return serializeStoredViewQuery({
362
390
  propertyFilters,
363
391
  sortBy: section.sortBy,
@@ -521,13 +549,26 @@ const buildViewNotesWhere = (query) => {
521
549
  const buildViewSectionWhere = (section) => {
522
550
  return buildViewNotesWhere(section);
523
551
  };
552
+ const buildViewBoardColumnWhere = (section, propertyDefinitionId, optionId) => {
553
+ const sectionWhere = buildViewSectionWhere(section);
554
+ const columnWhere = optionId === null ? {
555
+ properties: {
556
+ none: { propertyDefinitionId }
557
+ }
558
+ } : {
559
+ properties: {
560
+ some: { propertyDefinitionId, optionId }
561
+ }
562
+ };
563
+ return Object.keys(sectionWhere).length === 0 ? columnWhere : { AND: [sectionWhere, columnWhere] };
564
+ };
524
565
  const buildViewNotesOrderBy = (query) => {
525
566
  return [{ [query.sortBy]: query.sortOrder }, { id: "asc" }];
526
567
  };
527
568
  const buildViewSectionOrderBy = (section) => {
528
569
  return buildViewNotesOrderBy(section);
529
570
  };
530
- const getViewSectionNotes = async (id, pagination) => {
571
+ const getViewSectionNotes = async (id, pagination, sort = {}) => {
531
572
  const section = await models.viewSection.findUnique({
532
573
  where: { id: parseViewId(id) },
533
574
  include: orderedViewSectionTagsInclude
@@ -537,10 +578,14 @@ const getViewSectionNotes = async (id, pagination) => {
537
578
  }
538
579
  const serializedSection = serializeViewSection(section);
539
580
  const where = buildViewSectionWhere(serializedSection);
581
+ const effectiveSort = {
582
+ sortBy: sort.sortBy ?? serializedSection.sortBy,
583
+ sortOrder: sort.sortOrder ?? serializedSection.sortOrder
584
+ };
540
585
  const [totalCount, notes] = await Promise.all([
541
586
  models.note.count({ where }),
542
587
  models.note.findMany({
543
- orderBy: buildViewSectionOrderBy(serializedSection),
588
+ orderBy: buildViewNotesOrderBy(effectiveSort),
544
589
  where,
545
590
  take: Number(pagination.limit),
546
591
  skip: Number(pagination.offset)
@@ -551,6 +596,61 @@ const getViewSectionNotes = async (id, pagination) => {
551
596
  notes
552
597
  };
553
598
  };
599
+ const getViewSectionBoardColumn = async (id, optionValue, pagination) => {
600
+ const section = await models.viewSection.findUnique({
601
+ where: { id: parseViewId(id) },
602
+ include: orderedViewSectionTagsInclude
603
+ });
604
+ if (!section) {
605
+ return null;
606
+ }
607
+ const serializedSection = serializeViewSection(section);
608
+ if (serializedSection.displayType !== "board") {
609
+ throw new InvalidNotePropertyInputError("This section is not configured as a board.");
610
+ }
611
+ const groupingPropertyKey = serializedSection.displayOptions.boardGroupByPropertyKey;
612
+ if (!groupingPropertyKey) {
613
+ throw new InvalidNotePropertyInputError("Board sections require a grouping property.");
614
+ }
615
+ const groupingProperty = await models.propertyDefinition.findUnique({
616
+ where: { key: groupingPropertyKey },
617
+ select: {
618
+ id: true,
619
+ valueType: true,
620
+ options: {
621
+ orderBy: [{ order: "asc" }, { id: "asc" }],
622
+ select: { id: true, value: true }
623
+ }
624
+ }
625
+ });
626
+ if (!groupingProperty || groupingProperty.valueType !== "select") {
627
+ throw new InvalidNotePropertyInputError("The board grouping property is unavailable.");
628
+ }
629
+ const normalizedOptionValue = optionValue === null ? null : normalizeSelectFilterValue(optionValue);
630
+ const option = normalizedOptionValue === null ? null : groupingProperty.options.find((candidate) => candidate.value === normalizedOptionValue);
631
+ if (normalizedOptionValue !== null && !option) {
632
+ throw new InvalidNotePropertyInputError(
633
+ `Property ${groupingPropertyKey} option ${normalizedOptionValue} is not defined.`
634
+ );
635
+ }
636
+ const normalizedPagination = normalizeViewNotesPagination(pagination);
637
+ const where = buildViewBoardColumnWhere(serializedSection, groupingProperty.id, option?.id ?? null);
638
+ const [totalCount, notes] = await Promise.all([
639
+ models.note.count({ where }),
640
+ models.note.findMany({
641
+ orderBy: buildViewSectionOrderBy(serializedSection),
642
+ where,
643
+ take: normalizedPagination.limit,
644
+ skip: normalizedPagination.offset,
645
+ select: {
646
+ id: true,
647
+ title: true,
648
+ updatedAt: true
649
+ }
650
+ })
651
+ ]);
652
+ return { totalCount, notes };
653
+ };
554
654
  const getNotesByPropertiesWithDb = async (db, input, pagination) => {
555
655
  const normalizedQuery = normalizeViewNotesQueryInput(input);
556
656
  if (normalizedQuery.propertyFilters.length === 0) {
@@ -786,6 +886,7 @@ export {
786
886
  MAX_VIEW_SECTION_LIMIT,
787
887
  MIN_VIEW_SECTION_LIMIT,
788
888
  buildPropertyFilterWhere,
889
+ buildViewBoardColumnWhere,
789
890
  buildViewNotesWhere,
790
891
  buildViewSectionWhere,
791
892
  clampViewSectionLimit,
@@ -795,6 +896,7 @@ export {
795
896
  deleteViewTab,
796
897
  getNotesByProperties,
797
898
  getNotesByPropertiesWithDb,
899
+ getViewSectionBoardColumn,
798
900
  getViewSectionById,
799
901
  getViewSectionNotes,
800
902
  getViewWorkspace,
@@ -806,6 +908,7 @@ export {
806
908
  normalizeViewSectionInput,
807
909
  normalizeViewTabTitle,
808
910
  normalizeViewTableColumns,
911
+ normalizeViewTablePropertyKeys,
809
912
  normalizeViewTagNames,
810
913
  pickNextActiveViewTabId,
811
914
  reorderViewSections,
@@ -9,7 +9,6 @@ const EMBEDDING_API_KEY_PATH = path.resolve(DATA_DIR, "embedding-api-key");
9
9
  const paths = {
10
10
  packageRoot: path.resolve(PACKAGE_ROOT),
11
11
  clientDist: path.resolve(PACKAGE_ROOT, "client/dist"),
12
- clientIndex: path.resolve(PACKAGE_ROOT, "client/dist/index.html"),
13
12
  imageDir: path.resolve(IMAGE_DIR),
14
13
  searchIndex: path.resolve(SEARCH_INDEX_PATH),
15
14
  embeddingApiKey: path.resolve(EMBEDDING_API_KEY_PATH)
@@ -79,7 +79,7 @@ const createClientRouter = (authConfig) => Router().use(
79
79
  }
80
80
  next();
81
81
  }).use(createClientRouteCsrfTokenMiddleware(authConfig)).use(express.static(paths.clientDist, { extensions: ["html"] })).get(/.*/, (_req, res) => {
82
- res.sendFile(paths.clientIndex);
82
+ res.sendFile("index.html", { root: paths.clientDist });
83
83
  });
84
84
  export {
85
85
  createClientRouter
@@ -306,5 +306,6 @@ enum ViewTagMatchMode {
306
306
  enum ViewDisplayType {
307
307
  list
308
308
  table
309
+ board
309
310
  calendar
310
311
  }
@@ -1 +0,0 @@
1
- import{r as e}from"./floating-ui.react-dom-BWTnA00G.js";import{A as r}from"./note.api-D3oJmG3q.js";const n=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M224.49,136.49l-72,72a12,12,0,0,1-17-17L187,140H40a12,12,0,0,1,0-24H187L135.51,64.48a12,12,0,0,1,17-17l72,72A12,12,0,0,1,224.49,136.49Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,128l-72,72V56Z",opacity:"0.2"}),e.createElement("path",{d:"M221.66,122.34l-72-72A8,8,0,0,0,136,56v64H40a8,8,0,0,0,0,16h96v64a8,8,0,0,0,13.66,5.66l72-72A8,8,0,0,0,221.66,122.34ZM152,180.69V75.31L204.69,128Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M221.66,133.66l-72,72A8,8,0,0,1,136,200V136H40a8,8,0,0,1,0-16h96V56a8,8,0,0,1,13.66-5.66l72,72A8,8,0,0,1,221.66,133.66Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M220.24,132.24l-72,72a6,6,0,0,1-8.48-8.48L201.51,134H40a6,6,0,0,1,0-12H201.51L139.76,60.24a6,6,0,0,1,8.48-8.48l72,72A6,6,0,0,1,220.24,132.24Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M218.83,130.83l-72,72a4,4,0,0,1-5.66-5.66L206.34,132H40a4,4,0,0,1,0-8H206.34L141.17,58.83a4,4,0,0,1,5.66-5.66l72,72A4,4,0,0,1,218.83,130.83Z"}))]]),t=e.forwardRef((a,l)=>e.createElement(r,{ref:l,...a,weights:n}));t.displayName="ArrowRightIcon";const o=t;export{o as s};
@@ -1 +0,0 @@
1
- import{r as a,j as t}from"./floating-ui.react-dom-BWTnA00G.js";import{A as m,T as c,c as s}from"./note.api-D3oJmG3q.js";const i=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M87.5,151.52l64-64a12,12,0,0,1,17,17l-64,64a12,12,0,0,1-17-17Zm131-114a60.08,60.08,0,0,0-84.87,0L103.51,67.61a12,12,0,0,0,17,17l30.07-30.06a36,36,0,0,1,50.93,50.92L171.4,135.52a12,12,0,1,0,17,17l30.08-30.06A60.09,60.09,0,0,0,218.45,37.55ZM135.52,171.4l-30.07,30.08a36,36,0,0,1-50.92-50.93l30.06-30.07a12,12,0,0,0-17-17L37.55,133.58a60,60,0,0,0,84.88,84.87l30.06-30.07a12,12,0,0,0-17-17Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M209.94,113.94l-96,96a48,48,0,0,1-67.88-67.88l96-96a48,48,0,0,1,67.88,67.88Z",opacity:"0.2"}),a.createElement("path",{d:"M165.66,90.34a8,8,0,0,1,0,11.32l-64,64a8,8,0,0,1-11.32-11.32l64-64A8,8,0,0,1,165.66,90.34ZM215.6,40.4a56,56,0,0,0-79.2,0L106.34,70.45a8,8,0,0,0,11.32,11.32l30.06-30a40,40,0,0,1,56.57,56.56l-30.07,30.06a8,8,0,0,0,11.31,11.32L215.6,119.6a56,56,0,0,0,0-79.2ZM138.34,174.22l-30.06,30.06a40,40,0,1,1-56.56-56.57l30.05-30.05a8,8,0,0,0-11.32-11.32L40.4,136.4a56,56,0,0,0,79.2,79.2l30.06-30.07a8,8,0,0,0-11.32-11.31Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM144.56,173.66l-21.45,21.45a44,44,0,0,1-62.22-62.22l21.45-21.46a8,8,0,0,1,11.32,11.31L72.2,144.2a28,28,0,0,0,39.6,39.6l21.45-21.46a8,8,0,0,1,11.31,11.32Zm-34.9-16a8,8,0,0,1-11.32-11.32l48-48a8,8,0,0,1,11.32,11.32Zm85.45-34.55-21.45,21.45a8,8,0,0,1-11.32-11.31L183.8,111.8a28,28,0,0,0-39.6-39.6L122.74,93.66a8,8,0,0,1-11.31-11.32l21.46-21.45a44,44,0,0,1,62.22,62.22Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M164.25,91.75a6,6,0,0,1,0,8.49l-64,64a6,6,0,0,1-8.49-8.48l64-64A6,6,0,0,1,164.25,91.75ZM214.2,41.8a54.07,54.07,0,0,0-76.38,0L107.75,71.85a6,6,0,0,0,8.49,8.49l30.07-30.06a42,42,0,0,1,59.41,59.41l-30.08,30.07a6,6,0,1,0,8.49,8.49l30.07-30.07A54,54,0,0,0,214.2,41.8ZM139.76,175.64l-30.07,30.08a42,42,0,0,1-59.41-59.41l30.06-30.07a6,6,0,0,0-8.49-8.49l-30,30.07a54,54,0,0,0,76.38,76.39l30.07-30.08a6,6,0,0,0-8.49-8.49Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M165.66,90.34a8,8,0,0,1,0,11.32l-64,64a8,8,0,0,1-11.32-11.32l64-64A8,8,0,0,1,165.66,90.34ZM215.6,40.4a56,56,0,0,0-79.2,0L106.34,70.45a8,8,0,0,0,11.32,11.32l30.06-30a40,40,0,0,1,56.57,56.56l-30.07,30.06a8,8,0,0,0,11.31,11.32L215.6,119.6a56,56,0,0,0,0-79.2ZM138.34,174.22l-30.06,30.06a40,40,0,1,1-56.56-56.57l30.05-30.05a8,8,0,0,0-11.32-11.32L40.4,136.4a56,56,0,0,0,79.2,79.2l30.06-30.07a8,8,0,0,0-11.32-11.31Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M162.84,93.16a4,4,0,0,1,0,5.66l-64,64a4,4,0,0,1-5.66-5.66l64-64A4,4,0,0,1,162.84,93.16Zm49.95-49.95a52.07,52.07,0,0,0-73.56,0L109.17,73.27a4,4,0,0,0,5.65,5.66l30.07-30.06a44,44,0,0,1,62.24,62.24l-30.07,30.06a4,4,0,0,0,5.66,5.66l30.07-30.06A52.07,52.07,0,0,0,212.79,43.21ZM141.17,177.06l-30.06,30.07a44,44,0,0,1-62.24-62.24l30.06-30.06a4,4,0,0,0-5.66-5.66L43.21,139.23a52,52,0,0,0,73.56,73.56l30.06-30.07a4,4,0,1,0-5.66-5.66Z"}))]]),n=a.forwardRef((e,l)=>a.createElement(m,{ref:l,...e,weights:i}));n.displayName="LinkSimpleIcon";const o=n;function d({icon:e,title:l,className:r}){return t.jsxs("div",{className:s("flex items-center gap-2",r),children:[t.jsx("div",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center text-current",children:e}),t.jsx(c,{as:"span",variant:"label",weight:"semibold",className:"text-current",children:l})]})}export{d as A,o as p};
@@ -1,25 +0,0 @@
1
- import{r as s,j as e}from"./floating-ui.react-dom-BWTnA00G.js";import{A as ae,T as b,F as re,c as _,M as w,x as ne,y as Y,B as Z,N as se,a0 as oe,q as P,g as Q,P as le,l as ie,h as ce}from"./note.api-D3oJmG3q.js";import{d as f,s as de,a as U}from"./time-D5LRMumI.js";import{N as me,C as he}from"./url-9nrbQs7Z.js";import{l as ue}from"./app-BpSMjzET.js";import{C as ge}from"./Callout-BTd1BYtV.js";import"./preload-helper-BXl3LOEh.js";import"./Graph-LY_IgMYy.js";const pe=new Map([["bold",s.createElement(s.Fragment,null,s.createElement("path",{d:"M216.49,79.52l-56-56A12,12,0,0,0,152,20H56A20,20,0,0,0,36,40V216a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V88A12,12,0,0,0,216.49,79.52ZM160,57l23,23H160ZM60,212V44h76V92a12,12,0,0,0,12,12h48V212Zm112-80a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,132Zm0,40a12,12,0,0,1-12,12H96a12,12,0,0,1,0-24h64A12,12,0,0,1,172,172Z"}))],["duotone",s.createElement(s.Fragment,null,s.createElement("path",{d:"M208,88H152V32Z",opacity:"0.2"}),s.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z"}))],["fill",s.createElement(s.Fragment,null,s.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,176H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm0-32H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm-8-56V44l44,44Z"}))],["light",s.createElement(s.Fragment,null,s.createElement("path",{d:"M212.24,83.76l-56-56A6,6,0,0,0,152,26H56A14,14,0,0,0,42,40V216a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V88A6,6,0,0,0,212.24,83.76ZM158,46.48,193.52,82H158ZM200,218H56a2,2,0,0,1-2-2V40a2,2,0,0,1,2-2h90V88a6,6,0,0,0,6,6h50V216A2,2,0,0,1,200,218Zm-34-82a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,136Zm0,32a6,6,0,0,1-6,6H96a6,6,0,0,1,0-12h64A6,6,0,0,1,166,168Z"}))],["regular",s.createElement(s.Fragment,null,s.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z"}))],["thin",s.createElement(s.Fragment,null,s.createElement("path",{d:"M210.83,85.17l-56-56A4,4,0,0,0,152,28H56A12,12,0,0,0,44,40V216a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V88A4,4,0,0,0,210.83,85.17ZM156,41.65,198.34,84H156ZM200,220H56a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h92V88a4,4,0,0,0,4,4h52V216A4,4,0,0,1,200,220Zm-36-84a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,136Zm0,32a4,4,0,0,1-4,4H96a4,4,0,0,1,0-8h64A4,4,0,0,1,164,168Z"}))]]),B=s.forwardRef((a,t)=>s.createElement(ae,{ref:t,...a,weights:pe}));B.displayName="FileTextIcon";const xe=B,ye=({day:a,cellClassName:t,dayNumberClassName:r,isCurrentMonth:i,items:l,overflowCount:c,onOpenOverflow:h})=>e.jsxs("div",{className:`min-h-[196px] rounded-[16px] border p-2.5 ${t}`.trim(),children:[e.jsx("div",{className:"mb-2.5 flex justify-end",children:e.jsx(b,{as:"span",variant:"label",className:`flex h-7 w-7 items-center justify-center rounded-[10px] ${r}`.trim(),children:a})}),i&&l.length>0?e.jsxs("div",{className:"flex flex-col gap-1.5",children:[l,c>0?e.jsxs("button",{type:"button",onClick:h,className:"focus-ring-soft w-full rounded-[10px] border border-dashed border-border-subtle/70 bg-subtle/70 py-1 text-center text-micro font-semibold text-fg-tertiary outline-none transition-colors hover:border-border-secondary/70 hover:bg-hover-subtle hover:text-fg-secondary",children:["+",c," more"]}):null]}):null]}),K=({params:a,toneClassName:t="",header:r,title:i,meta:l,titleClassName:c=""})=>e.jsx(re,{to:me,params:a,className:"focus-ring-soft group block rounded-[8px] outline-none",children:e.jsxs("div",{className:_("flex items-start gap-1.5 rounded-[8px] px-1.5 py-1 transition-colors group-hover:bg-hover-subtle",t),children:[r?e.jsx("span",{className:"mt-[2px] flex h-4 w-4 shrink-0 items-center justify-center text-fg-tertiary",children:r}):e.jsx("span",{"aria-hidden":"true",className:"mt-[6px] h-1.5 w-1.5 shrink-0 rounded-full bg-fg-placeholder"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx(b,{as:"div",variant:"label",weight:"medium",tone:"secondary",className:_("line-clamp-1",c),children:i}),l?e.jsx(b,{as:"div",variant:"micro",weight:"medium",tone:"tertiary",className:"mt-0.5",children:l}):null]})]})}),fe=({note:a,type:t})=>e.jsx(K,{params:{id:a.id},header:e.jsx(xe,{size:12}),title:a.title,meta:f(Number(t==="create"?a.createdAt:a.updatedAt)).format("HH:mm")}),be=({reminder:a})=>e.jsx(K,{params:{id:String(a.note?.id??a.noteId)},header:e.jsx(de,{size:12}),title:a.content||a.note?.title||"No title",titleClassName:a.completed?"line-through":"",meta:f(Number(a.reminderDate)).format("HH:mm")}),k=3,q=(a,t)=>a.map(r=>r.type==="note"?e.jsx(fe,{note:r.item,type:t},`note-${r.item.id}`):e.jsx(be,{reminder:r.item},`reminder-${r.item.id}`)),je=({year:a,month:t,day:r,isCurrentMonth:i,isSunday:l,isToday:c,isPast:h,notes:u,reminders:g,type:M})=>{const[v,N]=s.useState(!1),x=s.useMemo(()=>{const n=u.map(m=>({type:"note",item:m})),d=g.map(m=>({type:"reminder",item:m}));return h?[...n,...d]:[...d,...n]},[h,u,g]),D=x.length>k,C=s.useMemo(()=>q(x.slice(0,k),M),[x,M]),E=s.useMemo(()=>q(x,M),[x,M]),R=s.useCallback(()=>N(!0),[]),A=s.useCallback(()=>N(!1),[]),S=()=>i?c?"border-border-secondary/70 bg-[color:color-mix(in_srgb,var(--surface)_88%,var(--accent-soft-primary)_12%)]":"bg-surface border-border-subtle":"bg-muted/18 border-border-subtle/70",$=()=>c?"bg-cta text-fg-on-filled font-semibold":i?l?"text-fg-weekend font-bold":"text-fg-secondary font-bold":"text-fg-disabled opacity-55";return e.jsxs(e.Fragment,{children:[e.jsx(ye,{day:r,cellClassName:S(),dayNumberClassName:$(),isCurrentMonth:i,items:C,overflowCount:D?x.length-k:0,onOpenOverflow:R}),D&&e.jsxs(w,{isOpen:v,onClose:A,variant:"inspect",children:[e.jsx(w.Header,{title:`${a}/${String(t).padStart(2,"0")}/${String(r).padStart(2,"0")}`,onClose:A}),e.jsxs(w.Body,{children:[e.jsxs(w.Description,{className:"sr-only",children:["View all notes and reminders scheduled for day ",r,"."]}),e.jsx("div",{className:"flex max-h-[60vh] flex-col gap-2 overflow-y-auto",children:E})]})]})]})},Me=s.memo(je),Ne=["January","February","March","April","May","June","July","August","September","October","November","December"],ve=({month:a,year:t,type:r,onPrevMonth:i,onNextMonth:l,onToday:c,onTypeChange:h})=>e.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex flex-wrap items-end gap-x-2.5 gap-y-1",children:[e.jsx(b,{as:"h1",variant:"display",weight:"bold",tracking:"tighter",className:"text-2xl leading-none sm:text-[2.15rem]",children:Ne[a-1]}),e.jsx(b,{as:"span",variant:"subheading",weight:"medium",tone:"secondary",tracking:"tight",className:"pb-0.5",children:t})]}),e.jsx(b,{as:"p",variant:"meta",weight:"medium",tone:"secondary",children:"Track note activity and reminders across the month"})]}),e.jsx("div",{className:"flex lg:justify-end",children:e.jsxs("div",{className:"surface-base inline-flex flex-wrap items-center gap-3 rounded-[16px] px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ue,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}),e.jsx(b,{id:"calendar-note-date-label",as:"span",variant:"label",weight:"medium",tone:"tertiary",children:"Note date"}),e.jsxs(ne,{value:r,"aria-labelledby":"calendar-note-date-label",onValueChange:g=>h(g),variant:"ghost",size:"sm",children:[e.jsx(Y,{value:"create",children:"Created"}),e.jsx(Y,{value:"update",children:"Updated"})]})]}),e.jsx("div",{className:"h-5 w-px bg-divider"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Z,{variant:"ghost",size:"sm",onClick:c,children:"Today"}),e.jsx(Z,{variant:"ghost",size:"icon-sm","aria-label":"Previous month",onClick:i,children:e.jsx(se,{width:18,height:18})}),e.jsx(Z,{variant:"ghost",size:"icon-sm","aria-label":"Next month",onClick:l,children:e.jsx(oe,{width:18,height:18})})]})]})})]}),De=`
2
- query NotesInDateRange($dateRange: DateRangeInput) {
3
- notesInDateRange(dateRange: $dateRange) {
4
- id
5
- title
6
- createdAt
7
- updatedAt
8
- }
9
- }
10
- `,Ae=`
11
- query RemindersInDateRange($dateRange: DateRangeInput) {
12
- remindersInDateRange(dateRange: $dateRange) {
13
- id
14
- noteId
15
- reminderDate
16
- completed
17
- priority
18
- content
19
- note {
20
- id
21
- title
22
- }
23
- }
24
- }
25
- `,He=async a=>{const t=await Q(De,{dateRange:a});if(t.type==="error")throw t;return t.notesInDateRange},we=async a=>{const t=await Q(Ae,{dateRange:a});if(t.type==="error")throw t;return t.remindersInDateRange},Ce=({year:a,month:t})=>{const r=`${a}-${String(t).padStart(2,"0")}-01`,i=t===12?1:t+1,c=`${t===12?a+1:a}-${String(i).padStart(2,"0")}-01`,h={start:r,end:c},u=U({queryKey:P.calendar.notesInDateRange(a,t),queryFn:()=>He(h)}),g=U({queryKey:P.reminders.inDateRange(a,t),queryFn:()=>we(h)});return{notes:u.data??[],reminders:g.data??[],isLoading:u.isLoading||g.isLoading,isError:u.isError||g.isError}},Ee=["SUN","MON","TUE","WED","THU","FRI","SAT"],Re=[],Se=[],z=ce(he);function Le(){const a=z.useNavigate(),{year:t,month:r,type:i}=z.useSearch(),l=s.useRef(null),c=s.useRef(!1),h=s.useRef(0),u=s.useRef(0),g=s.useCallback(n=>{c.current=!0,h.current=n.pageX-(l.current?.offsetLeft??0),u.current=l.current?.scrollLeft??0,l.current&&(l.current.style.cursor="grabbing",l.current.style.userSelect="none")},[]),M=s.useCallback(n=>{if(!c.current||!l.current)return;n.preventDefault();const m=(n.pageX-l.current.offsetLeft-h.current)*1.2;l.current.scrollLeft=u.current-m},[]),v=s.useCallback(()=>{c.current=!1,l.current&&(l.current.style.cursor="grab",l.current.style.userSelect="")},[]),{notes:N,reminders:x,isLoading:D,isError:C}=Ce({year:t,month:r}),E=s.useMemo(()=>{const n=f(),d=`${n.year()}-${n.month()+1}-${n.date()}`,m=new Map;for(const o of N){const y=i==="create"?f(Number(o.createdAt)):f(Number(o.updatedAt)),p=`${y.year()}-${y.month()+1}-${y.date()}`,j=m.get(p)||[];j.push(o),m.set(p,j)}const V=new Map;for(const o of x){const y=f(Number(o.reminderDate)),p=`${y.year()}-${y.month()+1}-${y.date()}`,j=V.get(p)||[];j.push(o),V.set(p,j)}const W=new Date(t,r-1,1),X=new Date(t,r,0),I=W.getDay(),T=X.getDate(),H=[],O=r===1?12:r-1,F=r===1?t-1:t,J=new Date(F,O,0).getDate();for(let o=I-1;o>=0;o--)H.push({day:J-o,isCurrentMonth:!1,year:F,month:O});for(let o=1;o<=T;o++)H.push({day:o,isCurrentMonth:!0,year:t,month:r});const L=(I+T)%7,G=L===0?0:7-L,ee=r===12?1:r+1,te=r===12?t+1:t;for(let o=1;o<=G;o++)H.push({day:o,isCurrentMonth:!1,year:te,month:ee});return H.map((o,y)=>{const p=`${o.year}-${o.month}-${o.day}`,j=f(`${o.year}-${String(o.month).padStart(2,"0")}-${String(o.day).padStart(2,"0")}`);return{key:p,year:o.year,month:o.month,day:o.day,isCurrentMonth:o.isCurrentMonth,isSunday:y%7===0,isToday:p===d,isPast:j.isBefore(n,"day"),notes:m.get(p)||Re,reminders:V.get(p)||Se}})},[t,r,N,x,i]),R=()=>{const n=r===1?12:r-1,d=r===1?t-1:t;a({search:m=>({...m,month:n,year:d})})},A=()=>{const n=r===12?1:r+1,d=r===12?t+1:t;a({search:m=>({...m,month:n,year:d})})},S=()=>{a({search:n=>({...n,month:f().month()+1,year:f().year()})})},$=n=>{n&&a({search:d=>({...d,type:n})})};return e.jsx(le,{title:"Calendar",variant:"none",children:C?e.jsx(ge,{children:"Failed to load calendar data. Please try again later."}):e.jsxs("div",{className:"surface-base",children:[e.jsx("div",{className:"border-b border-border-subtle/80 px-4 py-4 sm:px-5",children:e.jsx(ve,{month:r,year:t,type:i,onPrevMonth:R,onNextMonth:A,onToday:S,onTypeChange:$})}),e.jsx("div",{ref:l,className:"cursor-grab overflow-x-auto px-4 pb-4 pt-3 sm:px-5",onMouseDown:g,onMouseMove:M,onMouseUp:v,onMouseLeave:v,children:e.jsxs("div",{className:"min-w-[1260px]",children:[e.jsx("div",{className:"mb-2.5 grid grid-cols-7 gap-1.5",children:Ee.map((n,d)=>e.jsx(b,{as:"div",variant:"label",weight:"semibold",tracking:"wider",transform:"uppercase",className:`py-2 text-center ${d===0?"text-fg-weekend":"text-fg-tertiary"}`,children:n},n))}),D?e.jsx("div",{className:"grid grid-cols-7 gap-1.5",children:Array.from({length:35}).map((n,d)=>e.jsx(ie,{height:180},d))}):e.jsx("div",{className:"grid grid-cols-7 gap-1.5",children:E.map(n=>e.jsx(Me,{year:n.year,month:n.month,day:n.day,isCurrentMonth:n.isCurrentMonth,isSunday:n.isSunday,isToday:n.isToday,isPast:n.isPast,notes:n.notes,reminders:n.reminders,type:i},n.key))})]})})]})})}export{Le as default};
@@ -1 +0,0 @@
1
- import{r as e,j as n}from"./floating-ui.react-dom-BWTnA00G.js";import{A as m,T as d}from"./note.api-D3oJmG3q.js";const p=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M108,84a16,16,0,1,1,16,16A16,16,0,0,1,108,84Zm128,44A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Zm-72,36.68V132a20,20,0,0,0-20-20,12,12,0,0,0-4,23.32V168a20,20,0,0,0,20,20,12,12,0,0,0,4-23.32Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),e.createElement("path",{d:"M144,176a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176Zm88-48A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM124,96a12,12,0,1,0-12-12A12,12,0,0,0,124,96Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M142,176a6,6,0,0,1-6,6,14,14,0,0,1-14-14V128a2,2,0,0,0-2-2,6,6,0,0,1,0-12,14,14,0,0,1,14,14v40a2,2,0,0,0,2,2A6,6,0,0,1,142,176ZM124,94a10,10,0,1,0-10-10A10,10,0,0,0,124,94Zm106,34A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M140,176a4,4,0,0,1-4,4,12,12,0,0,1-12-12V128a4,4,0,0,0-4-4,4,4,0,0,1,0-8,12,12,0,0,1,12,12v40a4,4,0,0,0,4,4A4,4,0,0,1,140,176ZM124,92a8,8,0,1,0-8-8A8,8,0,0,0,124,92Zm104,36A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z"}))]]),g=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm-12-80V80a12,12,0,0,1,24,0v52a12,12,0,0,1-24,0Zm28,40a16,16,0,1,1-16-16A16,16,0,0,1,144,172Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm-6-82V80a6,6,0,0,1,12,0v56a6,6,0,0,1-12,0Zm16,36a10,10,0,1,1-10-10A10,10,0,0,1,138,172Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm-4-84V80a4,4,0,0,1,8,0v56a4,4,0,0,1-8,0Zm12,36a8,8,0,1,1-8-8A8,8,0,0,1,136,172Z"}))]]),l=e.forwardRef((a,t)=>e.createElement(m,{ref:t,...a,weights:p}));l.displayName="InfoIcon";const E=l,c=e.forwardRef((a,t)=>e.createElement(m,{ref:t,...a,weights:g}));c.displayName="WarningCircleIcon";const i=c,M=({children:a,className:t="",tone:r="info"})=>{const o=r==="danger"?i:E,Z=r==="danger"?"border-border-error/70 bg-accent-soft-danger/60":"border-border-subtle bg-hover-subtle/50",s=r==="danger"?"text-fg-error":"text-fg-tertiary",A=r==="danger"?"error":"secondary";return n.jsxs("div",{className:`flex items-center gap-2.5 rounded-[12px] border px-4 py-3 ${Z} ${t}`,children:[n.jsx(o,{className:`h-4 w-4 shrink-0 ${s}`}),n.jsx(d,{as:"div",variant:"meta",weight:"medium",tone:A,children:a})]})};export{M as C,E as c,i as m};
@@ -1 +0,0 @@
1
- import{r as e}from"./floating-ui.react-dom-BWTnA00G.js";import{A as V}from"./note.api-D3oJmG3q.js";const n=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,40V168H168V88H88V40Z",opacity:"0.2"}),e.createElement("path",{d:"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-8,128H176V88a8,8,0,0,0-8-8H96V48H208Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,34H88a6,6,0,0,0-6,6V82H40a6,6,0,0,0-6,6V216a6,6,0,0,0,6,6H168a6,6,0,0,0,6-6V174h42a6,6,0,0,0,6-6V40A6,6,0,0,0,216,34ZM162,210H46V94H162Zm48-48H174V88a6,6,0,0,0-6-6H94V46H210Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216,36H88a4,4,0,0,0-4,4V84H40a4,4,0,0,0-4,4V216a4,4,0,0,0,4,4H168a4,4,0,0,0,4-4V172h44a4,4,0,0,0,4-4V40A4,4,0,0,0,216,36ZM164,212H44V92H164Zm48-48H172V88a4,4,0,0,0-4-4H92V44H212Z"}))]]),a=e.forwardRef((t,H)=>e.createElement(V,{ref:H,...t,weights:n}));a.displayName="CopyIcon";const m=a;export{m as s};
@@ -1 +0,0 @@
1
- import{r as e}from"./floating-ui.react-dom-BWTnA00G.js";import{A as n}from"./note.api-D3oJmG3q.js";const r=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M216.49,79.52l-56-56A12,12,0,0,0,152,20H56A20,20,0,0,0,36,40V216a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V88A12,12,0,0,0,216.49,79.52ZM160,57l23,23H160ZM60,212V44h76V92a12,12,0,0,0,12,12h48V212Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M208,88H152V32Z",opacity:"0.2"}),e.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM152,88V44l44,44Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M212.24,83.76l-56-56A6,6,0,0,0,152,26H56A14,14,0,0,0,42,40V216a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V88A6,6,0,0,0,212.24,83.76ZM158,46.48,193.52,82H158ZM200,218H56a2,2,0,0,1-2-2V40a2,2,0,0,1,2-2h90V88a6,6,0,0,0,6,6h50V216A2,2,0,0,1,200,218Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M210.83,85.17l-56-56A4,4,0,0,0,152,28H56A12,12,0,0,0,44,40V216a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V88A4,4,0,0,0,210.83,85.17ZM156,41.65,198.34,84H156ZM200,220H56a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h92V88a4,4,0,0,0,4,4h52V216A4,4,0,0,1,200,220Z"}))]]),a=e.forwardRef((t,l)=>e.createElement(n,{ref:l,...t,weights:r}));a.displayName="FileIcon";const H=a;export{H as s};