@adminide-stack/yantra-mobile 12.0.141-alpha.1 → 12.0.142-alpha.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 (227) hide show
  1. package/lib/features/agent-chat/NativeAgentChat.js +21 -4
  2. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  3. package/lib/features/chat/ApprovalCard.js +353 -0
  4. package/lib/features/chat/ApprovalCard.js.map +1 -0
  5. package/lib/features/chat/AskUserCard.js +9 -2
  6. package/lib/features/chat/AskUserCard.js.map +1 -1
  7. package/lib/features/chat/askUser.js +25 -3
  8. package/lib/features/chat/askUser.js.map +1 -1
  9. package/lib/features/chat/queuedFollowUpRows.js +13 -0
  10. package/lib/features/chat/queuedFollowUpRows.js.map +1 -0
  11. package/lib/features/dictate/DictateExperience.js +59 -7
  12. package/lib/features/dictate/DictateExperience.js.map +1 -1
  13. package/lib/features/dictate/components/NoteView.js +227 -12
  14. package/lib/features/dictate/components/NoteView.js.map +1 -1
  15. package/lib/features/dictate/dictateClient.js +93 -23
  16. package/lib/features/dictate/dictateClient.js.map +1 -1
  17. package/lib/features/dictate/dictatePreference.js +19 -0
  18. package/lib/features/dictate/dictatePreference.js.map +1 -0
  19. package/lib/features/dictate/noteText.js +17 -2
  20. package/lib/features/dictate/noteText.js.map +1 -1
  21. package/lib/features/dictate/privacy.js +96 -0
  22. package/lib/features/dictate/privacy.js.map +1 -0
  23. package/lib/features/dictate/shownNote.js +24 -0
  24. package/lib/features/dictate/shownNote.js.map +1 -0
  25. package/lib/features/discover/DiscoverArticle.js +105 -92
  26. package/lib/features/discover/DiscoverArticle.js.map +1 -1
  27. package/lib/features/discover/DiscoverFeed.js +97 -48
  28. package/lib/features/discover/DiscoverFeed.js.map +1 -1
  29. package/lib/features/discover/DiscoverFollowUp.js +135 -0
  30. package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
  31. package/lib/features/discover/DiscoverSidebar.js +555 -0
  32. package/lib/features/discover/DiscoverSidebar.js.map +1 -0
  33. package/lib/features/discover/DiscoverSkeletons.js +123 -0
  34. package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
  35. package/lib/features/discover/DiscoverStoryCards.js +193 -87
  36. package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
  37. package/lib/features/discover/followUpQuery.js +42 -0
  38. package/lib/features/discover/followUpQuery.js.map +1 -0
  39. package/lib/features/discover/markets.js +37 -0
  40. package/lib/features/discover/markets.js.map +1 -0
  41. package/lib/features/discover/useDiscoverSidebar.js +148 -0
  42. package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
  43. package/lib/features/discover/weather.js +42 -0
  44. package/lib/features/discover/weather.js.map +1 -0
  45. package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
  46. package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
  47. package/lib/features/inbox/InboxAgentChatPane.js +1 -1
  48. package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
  49. package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
  50. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
  51. package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
  52. package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
  53. package/lib/features/movies/MoviesAgentChatPane.js +1 -1
  54. package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
  55. package/lib/features/notion/NotionBlockSheets.js +206 -0
  56. package/lib/features/notion/NotionBlockSheets.js.map +1 -0
  57. package/lib/features/notion/NotionBlockView.js +36 -0
  58. package/lib/features/notion/NotionBlockView.js.map +1 -0
  59. package/lib/features/notion/NotionCommentsSheet.js +461 -0
  60. package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
  61. package/lib/features/notion/NotionConnectionsSheet.js +244 -0
  62. package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
  63. package/lib/features/notion/NotionHistorySheet.js +439 -0
  64. package/lib/features/notion/NotionHistorySheet.js.map +1 -0
  65. package/lib/features/notion/NotionMediaBlocks.js +803 -0
  66. package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
  67. package/lib/features/notion/NotionMentionSheet.js +279 -0
  68. package/lib/features/notion/NotionMentionSheet.js.map +1 -0
  69. package/lib/features/notion/NotionPageMenu.js +585 -0
  70. package/lib/features/notion/NotionPageMenu.js.map +1 -0
  71. package/lib/features/notion/NotionPageTree.js +220 -0
  72. package/lib/features/notion/NotionPageTree.js.map +1 -0
  73. package/lib/features/notion/NotionPageView.js +1253 -152
  74. package/lib/features/notion/NotionPageView.js.map +1 -1
  75. package/lib/features/notion/NotionShareSheet.js +606 -0
  76. package/lib/features/notion/NotionShareSheet.js.map +1 -0
  77. package/lib/features/notion/NotionSheets.js +87 -15
  78. package/lib/features/notion/NotionSheets.js.map +1 -1
  79. package/lib/features/notion/NotionSidebarSections.js +492 -0
  80. package/lib/features/notion/NotionSidebarSections.js.map +1 -0
  81. package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
  82. package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
  83. package/lib/features/notion/NotionWorkspaceView.js +257 -45
  84. package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
  85. package/lib/features/notion/database/DatabaseCells.js +554 -0
  86. package/lib/features/notion/database/DatabaseCells.js.map +1 -0
  87. package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
  88. package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
  89. package/lib/features/notion/database/DatabaseLayouts.js +461 -0
  90. package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
  91. package/lib/features/notion/database/DatabaseSheets.js +791 -0
  92. package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
  93. package/lib/features/notion/database/NotionDatabaseView.js +817 -0
  94. package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
  95. package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
  96. package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
  97. package/lib/features/notion/database/chartData.js +89 -0
  98. package/lib/features/notion/database/chartData.js.map +1 -0
  99. package/lib/features/notion/database/chartView.js +112 -0
  100. package/lib/features/notion/database/chartView.js.map +1 -0
  101. package/lib/features/notion/database/connectorButton.js +33 -0
  102. package/lib/features/notion/database/connectorButton.js.map +1 -0
  103. package/lib/features/notion/database/databaseCalc.js +208 -0
  104. package/lib/features/notion/database/databaseCalc.js.map +1 -0
  105. package/lib/features/notion/database/databaseCalendar.js +157 -0
  106. package/lib/features/notion/database/databaseCalendar.js.map +1 -0
  107. package/lib/features/notion/database/databaseCsv.js +98 -0
  108. package/lib/features/notion/database/databaseCsv.js.map +1 -0
  109. package/lib/features/notion/database/databaseCsvActions.js +58 -0
  110. package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
  111. package/lib/features/notion/database/databaseFilter.js +473 -0
  112. package/lib/features/notion/database/databaseFilter.js.map +1 -0
  113. package/lib/features/notion/database/databaseFormula.js +1072 -0
  114. package/lib/features/notion/database/databaseFormula.js.map +1 -0
  115. package/lib/features/notion/database/databaseGroup.js +151 -0
  116. package/lib/features/notion/database/databaseGroup.js.map +1 -0
  117. package/lib/features/notion/database/databaseRollup.js +58 -0
  118. package/lib/features/notion/database/databaseRollup.js.map +1 -0
  119. package/lib/features/notion/database/databaseTimeline.js +156 -0
  120. package/lib/features/notion/database/databaseTimeline.js.map +1 -0
  121. package/lib/features/notion/database/databaseView.js +1188 -0
  122. package/lib/features/notion/database/databaseView.js.map +1 -0
  123. package/lib/features/notion/database/databaseViews.js +310 -0
  124. package/lib/features/notion/database/databaseViews.js.map +1 -0
  125. package/lib/features/notion/database/relationSource.js +92 -0
  126. package/lib/features/notion/database/relationSource.js.map +1 -0
  127. package/lib/features/notion/database/uniqueId.js +17 -0
  128. package/lib/features/notion/database/uniqueId.js.map +1 -0
  129. package/lib/features/notion/database/useNotionDatabase.js +617 -0
  130. package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
  131. package/lib/features/notion/notionAgentRunStatus.js +39 -0
  132. package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
  133. package/lib/features/notion/notionCodeLanguages.js +112 -0
  134. package/lib/features/notion/notionCodeLanguages.js.map +1 -0
  135. package/lib/features/notion/notionComments.js +86 -0
  136. package/lib/features/notion/notionComments.js.map +1 -0
  137. package/lib/features/notion/notionConnections.js +74 -0
  138. package/lib/features/notion/notionConnections.js.map +1 -0
  139. package/lib/features/notion/notionDocuments.js +453 -1
  140. package/lib/features/notion/notionDocuments.js.map +1 -1
  141. package/lib/features/notion/notionEditorModel.js +142 -7
  142. package/lib/features/notion/notionEditorModel.js.map +1 -1
  143. package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
  144. package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
  145. package/lib/features/notion/notionMedia.js +119 -0
  146. package/lib/features/notion/notionMedia.js.map +1 -0
  147. package/lib/features/notion/notionMentionDate.js +32 -0
  148. package/lib/features/notion/notionMentionDate.js.map +1 -0
  149. package/lib/features/notion/notionMentionOptions.js +162 -0
  150. package/lib/features/notion/notionMentionOptions.js.map +1 -0
  151. package/lib/features/notion/notionNotesAgent.js +445 -0
  152. package/lib/features/notion/notionNotesAgent.js.map +1 -0
  153. package/lib/features/notion/notionPageAccess.js +168 -0
  154. package/lib/features/notion/notionPageAccess.js.map +1 -0
  155. package/lib/features/notion/notionPageActions.js +138 -0
  156. package/lib/features/notion/notionPageActions.js.map +1 -0
  157. package/lib/features/notion/notionPageHistory.js +154 -0
  158. package/lib/features/notion/notionPageHistory.js.map +1 -0
  159. package/lib/features/notion/notionPageKinds.js +200 -0
  160. package/lib/features/notion/notionPageKinds.js.map +1 -0
  161. package/lib/features/notion/notionRecents.js +48 -0
  162. package/lib/features/notion/notionRecents.js.map +1 -0
  163. package/lib/features/notion/notionRichText.js +177 -0
  164. package/lib/features/notion/notionRichText.js.map +1 -0
  165. package/lib/features/notion/notionRichTitle.js +336 -0
  166. package/lib/features/notion/notionRichTitle.js.map +1 -0
  167. package/lib/features/notion/useNotionWorkspace.js +272 -13
  168. package/lib/features/notion/useNotionWorkspace.js.map +1 -1
  169. package/lib/features/notion/usePageActions.js +155 -0
  170. package/lib/features/notion/usePageActions.js.map +1 -0
  171. package/lib/features/resume/ResumeAgentChatPane.js +1 -1
  172. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
  173. package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
  174. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
  175. package/lib/features/study/StudyAgentChatPane.js +1 -1
  176. package/lib/features/study/StudyAgentChatPane.js.map +1 -1
  177. package/lib/features/travel/TravelAgentChatPane.js +1 -1
  178. package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
  179. package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
  180. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  181. package/lib/features/webbuilder/buildFragments.js +1 -1
  182. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  183. package/lib/features/webbuilder/codeFiles.js +302 -0
  184. package/lib/features/webbuilder/codeFiles.js.map +1 -0
  185. package/lib/features/webbuilder/codeHighlight.js +209 -0
  186. package/lib/features/webbuilder/codeHighlight.js.map +1 -0
  187. package/lib/features/webbuilder/components/CodeView.js +682 -52
  188. package/lib/features/webbuilder/components/CodeView.js.map +1 -1
  189. package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
  190. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  191. package/lib/features/webbuilder/components/ProjectChat.js +3 -3
  192. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  193. package/lib/features/webbuilder/stepLabels.js +68 -0
  194. package/lib/features/webbuilder/stepLabels.js.map +1 -0
  195. package/lib/hooks/useHostChatSteering.js +45 -0
  196. package/lib/hooks/useHostChatSteering.js.map +1 -0
  197. package/lib/screens/Chat/index.js +2 -12
  198. package/lib/screens/Chat/index.js.map +1 -1
  199. package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
  200. package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
  201. package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
  202. package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
  203. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
  204. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  205. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
  206. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
  207. package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
  208. package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
  209. package/lib/screens/NotionPage/index.js +2 -2
  210. package/lib/screens/NotionPage/index.js.map +1 -1
  211. package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
  212. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  213. package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
  214. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  215. package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
  216. package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
  217. package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
  218. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  219. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
  220. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
  221. package/lib/screens/WebBuilderNative/index.js +1 -1
  222. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  223. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
  224. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  225. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
  226. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  227. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseDateLayouts.js","sources":["../../../../src/features/notion/database/DatabaseDateLayouts.tsx"],"sourcesContent":["/**\n * Calendar, timeline and chart layouts - the web Database{Calendar,Timeline,Chart}View on a phone.\n *\n * - Calendar: a month grid (or one week, view setting `calendarMode`) of the view's date property;\n * days show their rows as dots, the chosen day lists them below with \"+ New\" on that day; rows\n * with no date are listed after. Week start and weekends follow the view settings.\n * - Timeline: bars on a day axis (Day / Week / Month zoom), scrolled to today; ranges\n * (`{ start, end }`) span their days; rows without a date are listed below.\n * - Chart: vertical / horizontal bars or a donut of rows per group (count or sum of a number\n * property), with the chart settings (`settings.chart`) editable in place.\n */\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport Svg, { Circle } from 'react-native-svg';\nimport type { NotionPalette } from '../notionTheme';\nimport { textColorOf } from '../notionRichText';\nimport { ui } from '../notionUi';\nimport { CellValue, rowTitle } from './DatabaseCells';\nimport { ChoiceSheet } from './DatabaseSheets';\nimport {\n bucketRowsByDay,\n calendarDateProperty,\n dayLabel,\n dayNumber,\n isSameMonth,\n isWeekend,\n monthGrid,\n monthLabel,\n monthOf,\n readCalendarSettings,\n shiftMonth,\n weekdayLabels,\n weekLabel,\n weekOf,\n type MonthRef,\n} from './databaseCalendar';\nimport { localDayKey, shiftDayKey } from './databaseFilter';\nimport {\n DAY_WIDTH,\n TIMELINE_ZOOMS,\n axisTicks,\n barGeometry,\n dayOffset,\n splitRowsBySpan,\n timelineRange,\n type TimelineZoom,\n} from './databaseTimeline';\nimport {\n CHART_VIEW_KINDS,\n CHART_VIEW_SORTS,\n chartGroupColumns,\n chartValueColumns,\n chartViewItems,\n readChartViewSettings,\n type ChartViewSettings,\n} from './chartView';\nimport { defaultChartColor, formatChartValue } from './chartData';\nimport type { ViewSettings } from './databaseViews';\nimport type { LayoutProps } from './DatabaseLayouts';\nimport type { DatabaseRow } from './useNotionDatabase';\n\ntype Palette = NotionPalette;\n\nexport interface DateLayoutProps extends LayoutProps {\n /** New row with these property values (a calendar day). */\n onAddRowWith: (values: Record<string, unknown>) => void;\n onChangeSettings: (patch: Partial<ViewSettings>) => void;\n rowProps: LayoutProps['columns'];\n}\n\nfunction Segmented<T extends string>({\n palette,\n items,\n value,\n onChange,\n}: {\n palette: Palette;\n items: Array<{ id: T; label: string }>;\n value: T;\n onChange: (id: T) => void;\n}) {\n return (\n <View style={[styles.segmented, { backgroundColor: palette.fill }]}>\n {items.map((it) => {\n const on = it.id === value;\n return (\n <Pressable\n key={it.id}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: on }}\n onPress={() => onChange(it.id)}\n style={[styles.segment, on && { backgroundColor: palette.card }]}\n >\n <Text style={[styles.segmentText, { color: on ? palette.text : palette.textMuted }]}>\n {it.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nfunction RowLine({ p, row }: { p: DateLayoutProps; row: DatabaseRow }) {\n const { palette } = p;\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${rowTitle(row) || 'Untitled'}`}\n onPress={() => p.onOpenRow(row)}\n onLongPress={() => p.onRowMenu(row)}\n style={({ pressed }) => [\n styles.rowLine,\n { backgroundColor: pressed ? palette.pressed : palette.card, borderColor: palette.hairline },\n ]}\n >\n <Ionicons name=\"document-text-outline\" size={17} color={palette.textMuted} />\n <View style={ui.flex}>\n <Text\n numberOfLines={1}\n style={[styles.rowTitle, { color: rowTitle(row) ? palette.text : palette.textFaint }]}\n >\n {rowTitle(row) || 'Untitled'}\n </Text>\n {p.rowProps.length ? (\n <View style={styles.rowProps}>\n {p.rowProps.map((c) => (\n <CellValue\n key={c.name}\n row={row}\n column={c}\n getValue={p.getValue}\n isDark={p.isDark}\n palette={palette}\n />\n ))}\n </View>\n ) : null}\n </View>\n </Pressable>\n );\n}\n\nfunction NoDateProperty({ palette, what }: { palette: Palette; what: string }) {\n return (\n <View style={styles.emptyLayout}>\n <Ionicons name=\"calendar-outline\" size={34} color={palette.textFaint} />\n <Text style={[styles.emptyTitle, { color: palette.text }]}>{`A ${what} needs a Date property`}</Text>\n <Text style={[styles.emptyText, { color: palette.textMuted }]}>\n Add a Date property under Properties, then pick it in View options.\n </Text>\n </View>\n );\n}\n\n// ---- Calendar ------------------------------------------------------------------------------\n\nexport function CalendarLayout(p: DateLayoutProps) {\n const { palette } = p;\n const column = useMemo(() => calendarDateProperty(p.allColumns, p.groupBy), [p.allColumns, p.groupBy]);\n const cal = readCalendarSettings(p.settings);\n const today = localDayKey(new Date());\n const [month, setMonth] = useState<MonthRef>(() => monthOf(new Date()));\n const [day, setDay] = useState(today);\n const buckets = useMemo(\n () => (column ? bucketRowsByDay(p.rows, column, p.getValue) : null),\n [column, p.getValue, p.rows],\n );\n if (!column || !buckets) return <NoDateProperty palette={palette} what=\"calendar\" />;\n\n const weekdays = weekdayLabels(cal.weekStartsOn, 'narrow');\n const weeks = cal.mode === 'week' ? [weekOf(day, cal.weekStartsOn)] : monthGrid(month, cal.weekStartsOn);\n const keep = (d: string) => cal.showWeekends || !isWeekend(d);\n const dayRows = buckets.byDay.get(day) ?? [];\n const editable = column.type === 'date';\n\n const go = (delta: number) => {\n if (cal.mode === 'week') {\n const next = shiftDayKey(day, delta * 7);\n setDay(next);\n setMonth(monthOf(new Date(`${next}T12:00:00`)));\n } else setMonth((m) => shiftMonth(m, delta));\n };\n\n return (\n <ScrollView contentContainerStyle={styles.calendar}>\n <View style={styles.calHead}>\n <Text style={[styles.calTitle, { color: palette.text }]}>\n {cal.mode === 'week' ? weekLabel(weeks[0]) : monthLabel(month)}\n </Text>\n <View style={ui.flex} />\n <Pressable accessibilityLabel=\"Previous\" onPress={() => go(-1)} hitSlop={8} style={styles.navBtn}>\n <Ionicons name=\"chevron-back\" size={20} color={palette.text} />\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setMonth(monthOf(new Date()));\n setDay(today);\n }}\n style={[styles.todayBtn, { backgroundColor: palette.fill }]}\n >\n <Text style={[styles.todayText, { color: palette.text }]}>Today</Text>\n </Pressable>\n <Pressable accessibilityLabel=\"Next\" onPress={() => go(1)} hitSlop={8} style={styles.navBtn}>\n <Ionicons name=\"chevron-forward\" size={20} color={palette.text} />\n </Pressable>\n </View>\n <View style={styles.modeRow}>\n <Segmented\n palette={palette}\n items={[\n { id: 'month', label: 'Month' },\n { id: 'week', label: 'Week' },\n ]}\n value={cal.mode}\n onChange={(mode) => p.onChangeSettings({ calendarMode: mode === 'week' ? 'week' : undefined })}\n />\n </View>\n <View style={styles.weekRow}>\n {weeks[0]\n .map((d, i) => ({ d, i }))\n .filter(({ d }) => keep(d))\n .map(({ i }) => (\n <Text key={i} style={[styles.weekday, { color: palette.textMuted }]}>\n {weekdays[i]}\n </Text>\n ))}\n </View>\n {weeks.map((week) => (\n <View key={week[0]} style={styles.weekRow}>\n {week\n .filter((d) => keep(d))\n .map((d) => {\n const rows = buckets.byDay.get(d) ?? [];\n const on = d === day;\n const isToday = d === today;\n const dim = cal.mode === 'month' && !isSameMonth(d, month);\n return (\n <Pressable\n key={d}\n accessibilityRole=\"button\"\n accessibilityLabel={`${dayLabel(d)}, ${rows.length} ${rows.length === 1 ? 'row' : 'rows'}`}\n accessibilityState={{ selected: on }}\n onPress={() => setDay(d)}\n style={[styles.dayCell, on && { backgroundColor: palette.primarySoft }]}\n >\n <View style={[styles.dayNum, isToday && { backgroundColor: palette.primary }]}>\n <Text\n style={[\n styles.dayNumText,\n {\n color: isToday\n ? palette.onPrimary\n : dim\n ? palette.textFaint\n : palette.text,\n },\n ]}\n >\n {dayNumber(d)}\n </Text>\n </View>\n <View style={styles.dots}>\n {rows.slice(0, 3).map((r) => (\n <View\n key={r.id}\n style={[styles.dot, { backgroundColor: palette.primary }]}\n />\n ))}\n </View>\n {rows.length > 3 ? (\n <Text\n style={[styles.more, { color: palette.textMuted }]}\n >{`+${rows.length - 3}`}</Text>\n ) : null}\n </Pressable>\n );\n })}\n </View>\n ))}\n\n <View style={styles.dayHead}>\n <Text style={[styles.dayTitle, { color: palette.text }]}>{dayLabel(day)}</Text>\n {editable ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => p.onAddRowWith({ [column.name]: day })}\n style={[styles.addSmall, { backgroundColor: palette.primarySoft }]}\n >\n <Ionicons name=\"add\" size={16} color={palette.primary} />\n <Text style={[styles.addSmallText, { color: palette.primary }]}>New</Text>\n </Pressable>\n ) : null}\n </View>\n {dayRows.length ? (\n dayRows.map((r) => <RowLine key={r.id} p={p} row={r} />)\n ) : (\n <Text style={[styles.none, { color: palette.textMuted }]}>Nothing on this day.</Text>\n )}\n {buckets.undated.length ? (\n <>\n <Text\n style={[styles.section, { color: palette.textMuted }]}\n >{`No ${column.name} · ${buckets.undated.length}`}</Text>\n {buckets.undated.map((r) => (\n <RowLine key={r.id} p={p} row={r} />\n ))}\n </>\n ) : null}\n </ScrollView>\n );\n}\n\n// ---- Timeline -------------------------------------------------------------------------------\n\nconst BAR_HEIGHT = 30;\nconst LANE = 42;\n\nexport function TimelineLayout(p: DateLayoutProps) {\n const { palette } = p;\n const { width } = useWindowDimensions();\n const column = useMemo(() => calendarDateProperty(p.allColumns, p.groupBy), [p.allColumns, p.groupBy]);\n const [zoom, setZoom] = useState<TimelineZoom>('week');\n const today = localDayKey(new Date());\n const split = useMemo(\n () => (column ? splitRowsBySpan(p.rows, column, p.getValue) : null),\n [column, p.getValue, p.rows],\n );\n const range = useMemo(\n () => timelineRange(split?.dated.map((d) => d.span) ?? [], today, zoom),\n [split, today, zoom],\n );\n const dw = DAY_WIDTH[zoom];\n const ticks = useMemo(() => axisTicks(range, zoom), [range, zoom]);\n const scroller = useRef<ScrollView>(null);\n useEffect(() => {\n const x = Math.max(0, dayOffset(range, today) * dw - width / 3);\n const t = setTimeout(() => scroller.current?.scrollTo({ x, animated: false }), 0);\n return () => clearTimeout(t);\n }, [dw, range, today, width]);\n\n if (!column || !split) return <NoDateProperty palette={palette} what=\"timeline\" />;\n const contentWidth = range.days * dw;\n const todayX = dayOffset(range, today) * dw;\n\n return (\n <ScrollView contentContainerStyle={styles.timelineWrap}>\n <View style={styles.modeRow}>\n <Segmented palette={palette} items={TIMELINE_ZOOMS} value={zoom} onChange={setZoom} />\n <View style={ui.flex} />\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => scroller.current?.scrollTo({ x: Math.max(0, todayX - width / 3), animated: true })}\n style={[styles.todayBtn, { backgroundColor: palette.fill }]}\n >\n <Text style={[styles.todayText, { color: palette.text }]}>Today</Text>\n </Pressable>\n </View>\n <ScrollView ref={scroller} horizontal showsHorizontalScrollIndicator={false}>\n <View style={{ width: contentWidth }}>\n <View style={[styles.axis, { borderBottomColor: palette.hairline }]}>\n {ticks.map((t) => (\n <View key={t.day} style={[styles.tick, { left: t.offset * dw }]}>\n {t.major ? (\n <Text numberOfLines={1} style={[styles.tickMajor, { color: palette.text }]}>\n {t.major}\n </Text>\n ) : (\n <View style={styles.tickSpacer} />\n )}\n <Text style={[styles.tickLabel, { color: palette.textMuted }]}>{t.label}</Text>\n </View>\n ))}\n </View>\n <View style={{ height: Math.max(split.dated.length * LANE + 16, 120) }}>\n <View style={[styles.todayLine, { left: todayX, backgroundColor: palette.primary }]} />\n {split.dated.map(({ row, span }, i) => {\n const g = barGeometry(range, span, dw);\n const title = rowTitle(row) || 'Untitled';\n const inside = g.width > 90;\n return (\n <Pressable\n key={row.id}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${title}`}\n onPress={() => p.onOpenRow(row)}\n onLongPress={() => p.onRowMenu(row)}\n style={[styles.barLane, { top: 8 + i * LANE, left: g.left }]}\n >\n <View\n style={[\n styles.bar,\n {\n width: Math.max(g.width, 8),\n backgroundColor: palette.primarySoft,\n borderColor: palette.primary,\n },\n ]}\n >\n {inside ? (\n <Text numberOfLines={1} style={[styles.barText, { color: palette.text }]}>\n {title}\n </Text>\n ) : null}\n </View>\n {!inside ? (\n <Text numberOfLines={1} style={[styles.barOutside, { color: palette.text }]}>\n {title}\n </Text>\n ) : null}\n </Pressable>\n );\n })}\n </View>\n </View>\n </ScrollView>\n {split.undated.length ? (\n <View style={styles.undated}>\n <Text\n style={[styles.section, { color: palette.textMuted }]}\n >{`No ${column.name} · ${split.undated.length}`}</Text>\n {split.undated.map((r) => (\n <RowLine key={r.id} p={p} row={r} />\n ))}\n </View>\n ) : null}\n </ScrollView>\n );\n}\n\n// ---- Chart ----------------------------------------------------------------------------------\n\nfunction chartColor(color: string | undefined, index: number, isDark: boolean): string {\n if (color && color.startsWith('#')) return color;\n return (color && textColorOf(color, isDark)) || defaultChartColor(index);\n}\n\nexport function ChartLayout(p: DateLayoutProps) {\n const { palette } = p;\n const { width } = useWindowDimensions();\n const s = readChartViewSettings(p.settings, p.allColumns);\n const items = useMemo(\n () => chartViewItems(p.rows, p.allColumns, p.getValue, s),\n [p.allColumns, p.getValue, p.rows, s],\n );\n const groups = chartGroupColumns(p.allColumns);\n const values = chartValueColumns(p.allColumns);\n const [picker, setPicker] = useState<'kind' | 'group' | 'measure' | 'sort' | null>(null);\n const set = (patch: Partial<ChartViewSettings>) =>\n p.onChangeSettings({ chart: { ...((p.settings.chart as object) ?? {}), ...s, ...patch } });\n const max = Math.max(1, ...items.map((i) => i.value));\n const total = items.reduce((n, i) => n + i.value, 0);\n\n const control = (label: string, value: string, which: typeof picker) => (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => setPicker(which)}\n style={[styles.control, { backgroundColor: palette.fill }]}\n >\n <Text style={[styles.controlLabel, { color: palette.textMuted }]}>{label}</Text>\n <Text numberOfLines={1} style={[styles.controlValue, { color: palette.text }]}>\n {value}\n </Text>\n <Ionicons name=\"chevron-down\" size={13} color={palette.textMuted} />\n </Pressable>\n );\n\n if (!groups.length) {\n return (\n <View style={styles.emptyLayout}>\n <Ionicons name=\"bar-chart-outline\" size={34} color={palette.textFaint} />\n <Text style={[styles.emptyTitle, { color: palette.text }]}>Nothing to chart yet</Text>\n <Text style={[styles.emptyText, { color: palette.textMuted }]}>\n A chart groups rows by a Select, Status, Person, Date or Checkbox property.\n </Text>\n </View>\n );\n }\n\n const plotWidth = width - 32;\n const donut = 180;\n const r = 70;\n const circ = 2 * Math.PI * r;\n let acc = 0;\n\n return (\n <ScrollView contentContainerStyle={styles.chart}>\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.controls}>\n {control('Chart', CHART_VIEW_KINDS.find((k) => k.kind === s.kind)?.label ?? s.kind, 'kind')}\n {control('Group by', s.groupBy || 'None', 'group')}\n {control(\n 'Value',\n s.aggregate === 'sum' && s.valueProperty ? `Sum of ${s.valueProperty}` : 'Count',\n 'measure',\n )}\n {control('Sort', CHART_VIEW_SORTS.find((x) => x.sort === s.sort)?.label ?? '', 'sort')}\n </ScrollView>\n {!items.length ? (\n <Text style={[styles.none, { color: palette.textMuted }]}>No rows to chart.</Text>\n ) : s.kind === 'donut' ? (\n <View style={styles.donutWrap}>\n <View>\n <Svg width={donut} height={donut}>\n <Circle\n cx={donut / 2}\n cy={donut / 2}\n r={r}\n stroke={palette.fill}\n strokeWidth={26}\n fill=\"none\"\n />\n {items.map((it, i) => {\n const len = total ? (it.value / total) * circ : 0;\n const el = (\n <Circle\n key={it.label}\n cx={donut / 2}\n cy={donut / 2}\n r={r}\n stroke={chartColor(it.color, i, p.isDark)}\n strokeWidth={26}\n fill=\"none\"\n strokeDasharray={`${len} ${circ - len}`}\n strokeDashoffset={-acc}\n rotation={-90}\n origin={`${donut / 2}, ${donut / 2}`}\n />\n );\n acc += len;\n return el;\n })}\n </Svg>\n <View style={styles.donutCenter} pointerEvents=\"none\">\n <Text style={[styles.donutTotal, { color: palette.text }]}>{formatChartValue(total)}</Text>\n <Text style={[styles.donutLabel, { color: palette.textMuted }]}>\n {s.aggregate === 'sum' ? 'Total' : 'Rows'}\n </Text>\n </View>\n </View>\n <View style={styles.legend}>\n {items.map((it, i) => (\n <View key={it.label} style={styles.legendRow}>\n <View style={[styles.swatch, { backgroundColor: chartColor(it.color, i, p.isDark) }]} />\n <Text numberOfLines={1} style={[styles.legendLabel, { color: palette.text }]}>\n {it.label}\n </Text>\n <Text style={[styles.legendValue, { color: palette.textMuted }]}>\n {formatChartValue(it.value)}\n </Text>\n </View>\n ))}\n </View>\n </View>\n ) : s.kind === 'bar' ? (\n <View style={styles.bars}>\n {items.map((it, i) => (\n <View key={it.label} style={styles.hBarRow}>\n <Text numberOfLines={1} style={[styles.hBarLabel, { color: palette.text }]}>\n {it.label}\n </Text>\n <View style={[styles.hBarTrack, { backgroundColor: palette.fill }]}>\n <View\n style={[\n styles.hBarFill,\n {\n width: `${(it.value / max) * 100}%`,\n backgroundColor: chartColor(it.color, i, p.isDark),\n },\n ]}\n />\n </View>\n <Text style={[styles.hBarValue, { color: palette.textMuted }]}>\n {formatChartValue(it.value)}\n </Text>\n </View>\n ))}\n </View>\n ) : (\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View style={[styles.columns, { minWidth: plotWidth }]}>\n {items.map((it, i) => (\n <View key={it.label} style={styles.column}>\n <Text style={[styles.colValue, { color: palette.textMuted }]}>\n {formatChartValue(it.value)}\n </Text>\n <View\n style={[\n styles.colBar,\n {\n height: Math.max(4, (it.value / max) * 200),\n backgroundColor: chartColor(it.color, i, p.isDark),\n },\n ]}\n />\n <Text numberOfLines={2} style={[styles.colLabel, { color: palette.text }]}>\n {it.label}\n </Text>\n </View>\n ))}\n </View>\n </ScrollView>\n )}\n <ChoiceSheet\n visible={picker === 'kind'}\n title=\"Chart\"\n palette={palette}\n value={s.kind}\n choices={CHART_VIEW_KINDS.map((k) => ({ value: k.kind, label: k.label }))}\n onClose={() => setPicker(null)}\n onPick={(kind) => {\n setPicker(null);\n set({ kind });\n }}\n />\n <ChoiceSheet\n visible={picker === 'group'}\n title=\"Group by\"\n palette={palette}\n value={s.groupBy}\n choices={groups.map((c) => ({ value: c.name, label: c.name }))}\n onClose={() => setPicker(null)}\n onPick={(groupBy) => {\n setPicker(null);\n set({ groupBy });\n }}\n />\n <ChoiceSheet\n visible={picker === 'measure'}\n title=\"Value\"\n palette={palette}\n value={s.aggregate === 'sum' && s.valueProperty ? `sum:${s.valueProperty}` : 'count'}\n choices={[\n { value: 'count', label: 'Count rows' },\n ...values.map((c) => ({ value: `sum:${c.name}`, label: `Sum of ${c.name}` })),\n ]}\n onClose={() => setPicker(null)}\n onPick={(v) => {\n setPicker(null);\n if (v === 'count') set({ aggregate: 'count' });\n else set({ aggregate: 'sum', valueProperty: v.slice(4) });\n }}\n />\n <ChoiceSheet\n visible={picker === 'sort'}\n title=\"Sort\"\n palette={palette}\n value={s.sort}\n choices={CHART_VIEW_SORTS.map((x) => ({ value: x.sort, label: x.label }))}\n onClose={() => setPicker(null)}\n onPick={(sort) => {\n setPicker(null);\n set({ sort });\n }}\n />\n </ScrollView>\n );\n}\n\nconst styles = StyleSheet.create({\n segmented: { flexDirection: 'row', borderRadius: 10, padding: 2 },\n segment: { paddingHorizontal: 12, height: 30, borderRadius: 8, alignItems: 'center', justifyContent: 'center' },\n segmentText: { fontSize: 13, fontWeight: '600' },\n calendar: { padding: 12, paddingBottom: 48 },\n calHead: { flexDirection: 'row', alignItems: 'center', gap: 6, marginBottom: 8 },\n calTitle: { fontSize: 19, fontWeight: '800' },\n navBtn: { padding: 6 },\n todayBtn: { paddingHorizontal: 12, height: 32, borderRadius: 10, justifyContent: 'center' },\n todayText: { fontSize: 14, fontWeight: '600' },\n modeRow: { flexDirection: 'row', alignItems: 'center', marginBottom: 10 },\n weekRow: { flexDirection: 'row' },\n weekday: { flex: 1, textAlign: 'center', fontSize: 12, fontWeight: '600', paddingVertical: 4 },\n dayCell: { flex: 1, alignItems: 'center', paddingVertical: 6, minHeight: 56, borderRadius: 10 },\n dayNum: { width: 28, height: 28, borderRadius: 14, alignItems: 'center', justifyContent: 'center' },\n dayNumText: { fontSize: 15, fontWeight: '600' },\n dots: { flexDirection: 'row', gap: 3, marginTop: 4, height: 6 },\n dot: { width: 6, height: 6, borderRadius: 3 },\n more: { fontSize: 10, marginTop: 1 },\n dayHead: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginTop: 16,\n marginBottom: 8,\n },\n dayTitle: { fontSize: 16, fontWeight: '700' },\n addSmall: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n paddingHorizontal: 10,\n height: 30,\n borderRadius: 9,\n },\n addSmallText: { fontSize: 14, fontWeight: '700' },\n none: { fontSize: 14, paddingVertical: 12, textAlign: 'center' },\n section: {\n fontSize: 13,\n fontWeight: '700',\n marginTop: 18,\n marginBottom: 8,\n textTransform: 'uppercase',\n letterSpacing: 0.4,\n },\n rowLine: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n padding: 12,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n marginBottom: 8,\n },\n rowTitle: { fontSize: 15, fontWeight: '600' },\n rowProps: { flexDirection: 'row', flexWrap: 'wrap', gap: 6, marginTop: 4 },\n emptyLayout: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 32, gap: 8 },\n emptyTitle: { fontSize: 17, fontWeight: '700', textAlign: 'center' },\n emptyText: { fontSize: 14, textAlign: 'center', lineHeight: 20 },\n timelineWrap: { paddingVertical: 12, paddingBottom: 48 },\n axis: { height: 44, borderBottomWidth: StyleSheet.hairlineWidth },\n tick: { position: 'absolute', top: 2 },\n tickMajor: { fontSize: 12, fontWeight: '700', width: 120 },\n tickSpacer: { height: 16 },\n tickLabel: { fontSize: 11, marginTop: 2 },\n todayLine: { position: 'absolute', top: 0, bottom: 0, width: 2, opacity: 0.6 },\n barLane: { position: 'absolute', flexDirection: 'row', alignItems: 'center', height: BAR_HEIGHT },\n bar: { height: BAR_HEIGHT, borderRadius: 8, borderWidth: 1, justifyContent: 'center', paddingHorizontal: 8 },\n barText: { fontSize: 13, fontWeight: '600' },\n barOutside: { fontSize: 13, fontWeight: '600', marginLeft: 6, maxWidth: 220 },\n undated: { paddingHorizontal: 12 },\n chart: { padding: 16, paddingBottom: 48, gap: 16 },\n controls: { gap: 8 },\n control: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 10,\n height: 34,\n borderRadius: 10,\n },\n controlLabel: { fontSize: 12, fontWeight: '600' },\n controlValue: { fontSize: 14, fontWeight: '600', maxWidth: 160 },\n donutWrap: { alignItems: 'center', gap: 16 },\n donutCenter: { ...StyleSheet.absoluteFillObject, alignItems: 'center', justifyContent: 'center' },\n donutTotal: { fontSize: 24, fontWeight: '800' },\n donutLabel: { fontSize: 12 },\n legend: { alignSelf: 'stretch', gap: 8 },\n legendRow: { flexDirection: 'row', alignItems: 'center', gap: 10 },\n swatch: { width: 12, height: 12, borderRadius: 3 },\n legendLabel: { flex: 1, fontSize: 15 },\n legendValue: { fontSize: 14, fontVariant: ['tabular-nums'] },\n bars: { gap: 12 },\n hBarRow: { flexDirection: 'row', alignItems: 'center', gap: 10 },\n hBarLabel: { width: 96, fontSize: 14 },\n hBarTrack: { flex: 1, height: 22, borderRadius: 6, overflow: 'hidden' },\n hBarFill: { height: '100%', borderRadius: 6 },\n hBarValue: { width: 48, textAlign: 'right', fontSize: 13, fontVariant: ['tabular-nums'] },\n columns: { flexDirection: 'row', alignItems: 'flex-end', gap: 14, height: 260, paddingTop: 12 },\n column: { width: 56, alignItems: 'center', justifyContent: 'flex-end' },\n colValue: { fontSize: 12, marginBottom: 4, fontVariant: ['tabular-nums'] },\n colBar: { width: 36, borderTopLeftRadius: 8, borderTopRightRadius: 8 },\n colLabel: { fontSize: 12, marginTop: 6, textAlign: 'center' },\n});\n"],"names":["_a","formatChartValue"],"mappings":"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"}
@@ -0,0 +1,461 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useMemo}from'react';import {View,StyleSheet,Text,ScrollView,SectionList,Pressable,useWindowDimensions,FlatList,ActivityIndicator}from'react-native';import {Ionicons}from'@expo/vector-icons';import {Image}from'expo-image';import {ui}from'../notionUi.js';import {rowTitle,CellValue,rowCoverUrl,OptionChip}from'./DatabaseCells.js';import {calcKindFor,computeCalculation,CALC_LABELS}from'./databaseCalc.js';import {isTableGroupable,groupRowsByColumn}from'./databaseGroup.js';import {boardGroupKey,normalizeStatusOptions,groupRows}from'./databaseView.js';import {readCardLayout,readBoardGroups}from'./databaseViews.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const DEFAULT_WIDTH = 160;
18
+ function SelectMark({
19
+ on,
20
+ palette
21
+ }) {
22
+ return /* @__PURE__ */ jsx(Ionicons, { name: on ? "checkmark-circle" : "ellipse-outline", size: 22, color: on ? palette.primary : palette.textFaint });
23
+ }
24
+ function GroupHeader({
25
+ group,
26
+ column,
27
+ isDark,
28
+ palette
29
+ }) {
30
+ const chip = column && (column.type === "select" || column.type === "status") && group.value !== null;
31
+ return /* @__PURE__ */ jsxs(View, { style: [styles.groupHeader, {
32
+ backgroundColor: palette.bg
33
+ }], children: [
34
+ chip ? /* @__PURE__ */ jsx(OptionChip, { name: group.name, color: group.color, isDark, palette }) : /* @__PURE__ */ jsx(Text, { style: [styles.groupName, {
35
+ color: palette.text
36
+ }], children: group.name }),
37
+ /* @__PURE__ */ jsx(Text, { style: [styles.count, {
38
+ color: palette.textMuted
39
+ }], children: group.rows.length })
40
+ ] });
41
+ }
42
+ function LoadMore({
43
+ p
44
+ }) {
45
+ if (!p.hasMore) return null;
46
+ return /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: p.onLoadMore, disabled: p.loadingMore, style: [styles.loadMore, {
47
+ backgroundColor: p.palette.fill
48
+ }], children: p.loadingMore ? /* @__PURE__ */ jsx(ActivityIndicator, { color: p.palette.textMuted }) : /* @__PURE__ */ jsx(Text, { style: [styles.loadMoreText, {
49
+ color: p.palette.text
50
+ }], children: "Load more" }) });
51
+ }
52
+ function NewRowButton({
53
+ p,
54
+ onPress,
55
+ label = "New"
56
+ }) {
57
+ return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", onPress, style: ({
58
+ pressed
59
+ }) => [styles.newRow, pressed && {
60
+ backgroundColor: p.palette.pressed
61
+ }], children: [
62
+ /* @__PURE__ */ jsx(Ionicons, { name: "add", size: 18, color: p.palette.textMuted }),
63
+ /* @__PURE__ */ jsx(Text, { style: [styles.newRowText, {
64
+ color: p.palette.textMuted
65
+ }], children: label })
66
+ ] });
67
+ }
68
+ function useGroups(p) {
69
+ return useMemo(() => {
70
+ const column = p.groupBy ? p.allColumns.find((c) => c.name === p.groupBy) : void 0;
71
+ if (!column || !isTableGroupable(column)) return [{
72
+ group: null,
73
+ data: p.rows
74
+ }];
75
+ const groups = groupRowsByColumn(p.rows, column, p.getValue);
76
+ const shown = p.settings.hideEmptyGroups ? groups.filter((g) => g.rows.length) : groups;
77
+ return shown.map((g) => ({
78
+ group: g,
79
+ data: g.rows
80
+ }));
81
+ }, [p.allColumns, p.getValue, p.groupBy, p.rows, p.settings.hideEmptyGroups]);
82
+ }
83
+ function TableLayout(p) {
84
+ var _a;
85
+ const {
86
+ palette
87
+ } = p;
88
+ const sections = useGroups(p);
89
+ const groupColumn = p.groupBy ? p.allColumns.find((c) => c.name === p.groupBy) : void 0;
90
+ const widthOf = (c) => {
91
+ var _a2;
92
+ return (_a2 = c.width) != null ? _a2 : c.type === "checkbox" ? 90 : DEFAULT_WIDTH;
93
+ };
94
+ const totalWidth = p.columns.reduce((n, c) => n + widthOf(c), 0) + (p.selecting ? 44 : 0);
95
+ const wrapColumns = useMemo(() => {
96
+ var _a2;
97
+ return new Set((_a2 = p.settings.wrapColumns) != null ? _a2 : []);
98
+ }, [p.settings.wrapColumns]);
99
+ const calculations = (_a = p.settings.calculations) != null ? _a : {};
100
+ const hasCalcs = p.columns.some((c) => calculations[c.name]);
101
+ const header = /* @__PURE__ */ jsxs(View, { style: [styles.tr, styles.th, {
102
+ borderBottomColor: palette.hairline,
103
+ backgroundColor: palette.bg
104
+ }], children: [
105
+ p.selecting ? /* @__PURE__ */ jsx(View, { style: styles.selectCell }) : null,
106
+ p.columns.map((c) => /* @__PURE__ */ jsx(View, { style: [styles.cell, {
107
+ width: widthOf(c),
108
+ borderRightColor: palette.hairline
109
+ }], children: /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.thText, {
110
+ color: palette.textMuted
111
+ }], children: c.name }) }, c.name))
112
+ ] });
113
+ const footer = /* @__PURE__ */ jsxs(View, { children: [
114
+ /* @__PURE__ */ jsx(NewRowButton, { p, onPress: () => p.onAddRow() }),
115
+ hasCalcs ? /* @__PURE__ */ jsxs(View, { style: [styles.tr, {
116
+ borderTopColor: palette.hairline,
117
+ borderTopWidth: StyleSheet.hairlineWidth
118
+ }], children: [
119
+ p.selecting ? /* @__PURE__ */ jsx(View, { style: styles.selectCell }) : null,
120
+ p.columns.map((c) => {
121
+ var _a2, _b;
122
+ const kind = calcKindFor(calculations[c.name], c.type);
123
+ const result = kind === "none" ? null : computeCalculation(p.rows.map((r) => p.getValue(r, c)), c.type, kind);
124
+ return /* @__PURE__ */ jsx(View, { style: [styles.cell, {
125
+ width: widthOf(c)
126
+ }], children: (result == null ? void 0 : result.value) ? /* @__PURE__ */ jsxs(Text, { numberOfLines: 1, style: [styles.calc, {
127
+ color: palette.textMuted
128
+ }], children: [
129
+ `${(_b = (_a2 = CALC_LABELS[kind]) == null ? void 0 : _a2.short) != null ? _b : result.label} `,
130
+ /* @__PURE__ */ jsx(Text, { style: {
131
+ color: palette.text
132
+ }, children: result.value })
133
+ ] }) : null }, c.name);
134
+ })
135
+ ] }) : null,
136
+ /* @__PURE__ */ jsx(LoadMore, { p })
137
+ ] });
138
+ return /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: {
139
+ minWidth: "100%"
140
+ }, children: /* @__PURE__ */ jsx(SectionList, { style: {
141
+ width: Math.max(totalWidth, 1)
142
+ }, sections: sections.map((s, i) => __spreadValues({
143
+ key: s.group ? boardGroupKey(s.group) || `g${i}` : "all"
144
+ }, s)), keyExtractor: (r) => r.id, stickySectionHeadersEnabled: false, ListHeaderComponent: header, ListFooterComponent: footer, refreshing: p.refreshing, onRefresh: p.onRefresh, renderSectionHeader: ({
145
+ section
146
+ }) => section.group ? /* @__PURE__ */ jsx(GroupHeader, { group: section.group, column: groupColumn, isDark: p.isDark, palette }) : null, renderSectionFooter: ({
147
+ section
148
+ }) => section.group && groupColumn ? /* @__PURE__ */ jsx(NewRowButton, { p, onPress: () => p.onAddRow({
149
+ column: groupColumn,
150
+ value: section.group.value
151
+ }) }) : null, renderItem: ({
152
+ item: row
153
+ }) => {
154
+ const on = p.selected.has(row.id);
155
+ return /* @__PURE__ */ jsxs(Pressable, { onLongPress: () => p.onRowMenu(row), onPress: p.selecting ? () => p.onToggleSelect(row) : void 0, style: [styles.tr, {
156
+ borderBottomColor: palette.hairline
157
+ }, on && {
158
+ backgroundColor: palette.primarySoft
159
+ }], children: [
160
+ p.selecting ? /* @__PURE__ */ jsx(View, { style: styles.selectCell, children: /* @__PURE__ */ jsx(SelectMark, { on, palette }) }) : null,
161
+ p.columns.map((c) => {
162
+ const wrap = Boolean(p.settings.wrap) || wrapColumns.has(c.name);
163
+ return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", accessibilityLabel: c.type === "title" ? `Open ${rowTitle(row) || "Untitled"}` : `Edit ${c.name}`, disabled: p.selecting, onPress: () => c.type === "title" ? p.onOpenRow(row) : c.type === "checkbox" ? p.onToggleCheckbox(row, c) : p.onEditCell(row, c), onLongPress: () => c.type === "title" ? p.onEditCell(row, c) : p.onRowMenu(row), style: ({
164
+ pressed
165
+ }) => [styles.cell, {
166
+ width: widthOf(c),
167
+ borderRightColor: palette.hairline,
168
+ backgroundColor: pressed ? palette.pressed : void 0
169
+ }], children: [
170
+ c.type === "title" ? /* @__PURE__ */ jsx(Ionicons, { name: "document-text-outline", size: 15, color: palette.textMuted, style: styles.titleIcon }) : null,
171
+ /* @__PURE__ */ jsx(View, { style: ui.flex, children: /* @__PURE__ */ jsx(CellValue, { row, column: c, getValue: p.getValue, isDark: p.isDark, palette, wrap, onToggleCheckbox: c.type === "checkbox" && !p.selecting ? () => p.onToggleCheckbox(row, c) : void 0 }) })
172
+ ] }, c.name);
173
+ })
174
+ ] });
175
+ } }) });
176
+ }
177
+ function Card({
178
+ p,
179
+ row,
180
+ props: shown,
181
+ cover
182
+ }) {
183
+ var _a;
184
+ const {
185
+ palette
186
+ } = p;
187
+ const on = p.selected.has(row.id);
188
+ return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", accessibilityLabel: `Open ${rowTitle(row) || "Untitled"}`, onPress: () => p.selecting ? p.onToggleSelect(row) : p.onOpenRow(row), onLongPress: () => p.onRowMenu(row), style: ({
189
+ pressed
190
+ }) => [styles.card, {
191
+ backgroundColor: pressed ? palette.pressed : palette.card,
192
+ borderColor: on ? palette.primary : palette.hairline
193
+ }], children: [
194
+ cover !== void 0 ? cover ? /* @__PURE__ */ jsx(Image, { source: {
195
+ uri: cover
196
+ }, style: styles.cover, contentFit: "cover" }) : /* @__PURE__ */ jsx(View, { style: [styles.cover, styles.coverEmpty, {
197
+ backgroundColor: palette.fill
198
+ }], children: /* @__PURE__ */ jsx(Ionicons, { name: "document-text-outline", size: 24, color: palette.textFaint }) }) : null,
199
+ /* @__PURE__ */ jsxs(View, { style: styles.cardBody, children: [
200
+ /* @__PURE__ */ jsxs(View, { style: styles.cardTitleRow, children: [
201
+ p.selecting ? /* @__PURE__ */ jsx(SelectMark, { on, palette }) : null,
202
+ /* @__PURE__ */ jsx(View, { style: ui.flex, children: /* @__PURE__ */ jsx(CellValue, { row, column: (_a = p.allColumns.find((c) => c.type === "title")) != null ? _a : {
203
+ name: "title",
204
+ type: "title"
205
+ }, getValue: p.getValue, isDark: p.isDark, palette, wrap: true }) })
206
+ ] }),
207
+ shown.map((c) => /* @__PURE__ */ jsx(View, { style: styles.cardProp, children: /* @__PURE__ */ jsx(CellValue, { row, column: c, getValue: p.getValue, isDark: p.isDark, palette, onToggleCheckbox: c.type === "checkbox" ? () => p.onToggleCheckbox(row, c) : void 0 }) }, c.name))
208
+ ] })
209
+ ] });
210
+ }
211
+ function BoardLayout(p) {
212
+ const {
213
+ palette
214
+ } = p;
215
+ const column = p.groupBy ? p.allColumns.find((c) => c.name === p.groupBy) : void 0;
216
+ const groups = useMemo(() => {
217
+ var _a;
218
+ if (!column) return [];
219
+ const options = column.type === "status" ? normalizeStatusOptions(column.options) : (_a = column.options) != null ? _a : [];
220
+ return groupRows(p.rows, column.name, options);
221
+ }, [column, p.rows]);
222
+ const {
223
+ collapsed,
224
+ hidden
225
+ } = readBoardGroups(p.settings);
226
+ const shown = groups.filter((g) => !hidden.includes(boardGroupKey(g)) && !(p.settings.hideEmptyGroups && !g.rows.length));
227
+ if (!column) {
228
+ return /* @__PURE__ */ jsxs(View, { style: styles.boardEmpty, children: [
229
+ /* @__PURE__ */ jsx(Ionicons, { name: "albums-outline", size: 34, color: palette.textFaint }),
230
+ /* @__PURE__ */ jsx(Text, { style: [styles.boardEmptyTitle, {
231
+ color: palette.text
232
+ }], children: "Group this board" }),
233
+ /* @__PURE__ */ jsx(Text, { style: [styles.boardEmptyText, {
234
+ color: palette.textMuted
235
+ }], children: "A board groups rows by a Status or Select property. Add one, then pick it under Group." })
236
+ ] });
237
+ }
238
+ return /* @__PURE__ */ jsxs(ScrollView, { horizontal: true, contentContainerStyle: styles.board, showsHorizontalScrollIndicator: false, children: [
239
+ shown.map((g) => {
240
+ const key = boardGroupKey(g);
241
+ const isCollapsed = collapsed.includes(key);
242
+ return /* @__PURE__ */ jsxs(View, { style: [styles.boardColumn, isCollapsed && styles.boardColumnCollapsed], children: [
243
+ /* @__PURE__ */ jsx(GroupHeader, { group: g, column, isDark: p.isDark, palette }),
244
+ isCollapsed ? null : /* @__PURE__ */ jsxs(ScrollView, { contentContainerStyle: styles.boardCards, showsVerticalScrollIndicator: false, children: [
245
+ g.rows.map((row) => /* @__PURE__ */ jsx(Card, { p, row, props: p.cardProps }, row.id)),
246
+ /* @__PURE__ */ jsx(NewRowButton, { p, onPress: () => p.onAddRow({
247
+ column,
248
+ value: g.value
249
+ }) })
250
+ ] })
251
+ ] }, key || "__empty");
252
+ }),
253
+ /* @__PURE__ */ jsx(View, { style: styles.boardTail, children: /* @__PURE__ */ jsx(LoadMore, { p }) })
254
+ ] });
255
+ }
256
+ function ListLayout(p) {
257
+ const {
258
+ palette
259
+ } = p;
260
+ const sections = useGroups(p);
261
+ const groupColumn = p.groupBy ? p.allColumns.find((c) => c.name === p.groupBy) : void 0;
262
+ return /* @__PURE__ */ jsx(SectionList, { sections: sections.map((s, i) => __spreadValues({
263
+ key: s.group ? boardGroupKey(s.group) || `g${i}` : "all"
264
+ }, s)), keyExtractor: (r) => r.id, stickySectionHeadersEnabled: false, contentContainerStyle: styles.listContent, refreshing: p.refreshing, onRefresh: p.onRefresh, renderSectionHeader: ({
265
+ section
266
+ }) => section.group ? /* @__PURE__ */ jsx(GroupHeader, { group: section.group, column: groupColumn, isDark: p.isDark, palette }) : null, ListFooterComponent: /* @__PURE__ */ jsxs(View, { children: [
267
+ /* @__PURE__ */ jsx(NewRowButton, { p, onPress: () => p.onAddRow() }),
268
+ /* @__PURE__ */ jsx(LoadMore, { p })
269
+ ] }), renderItem: ({
270
+ item: row
271
+ }) => {
272
+ var _a;
273
+ const on = p.selected.has(row.id);
274
+ return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", accessibilityLabel: `Open ${rowTitle(row) || "Untitled"}`, onPress: () => p.selecting ? p.onToggleSelect(row) : p.onOpenRow(row), onLongPress: () => p.onRowMenu(row), style: ({
275
+ pressed
276
+ }) => [styles.listRow, {
277
+ borderBottomColor: palette.hairline
278
+ }, (pressed || on) && {
279
+ backgroundColor: on ? palette.primarySoft : palette.pressed
280
+ }], children: [
281
+ p.selecting ? /* @__PURE__ */ jsx(SelectMark, { on, palette }) : /* @__PURE__ */ jsx(Ionicons, { name: "document-text-outline", size: 18, color: palette.textMuted }),
282
+ /* @__PURE__ */ jsx(View, { style: ui.flex, children: /* @__PURE__ */ jsx(CellValue, { row, column: (_a = p.allColumns.find((c) => c.type === "title")) != null ? _a : {
283
+ name: "title",
284
+ type: "title"
285
+ }, getValue: p.getValue, isDark: p.isDark, palette }) }),
286
+ /* @__PURE__ */ jsx(View, { style: styles.listProps, children: p.rowProps.map((c) => /* @__PURE__ */ jsx(CellValue, { row, column: c, getValue: p.getValue, isDark: p.isDark, palette }, c.name)) })
287
+ ] });
288
+ } });
289
+ }
290
+ function GalleryLayout(p) {
291
+ const {
292
+ width
293
+ } = useWindowDimensions();
294
+ const layout = readCardLayout(p.settings, {
295
+ cover: true
296
+ });
297
+ const perRow = layout.size === "large" ? 1 : layout.size === "small" ? 3 : 2;
298
+ const gap = 12;
299
+ const cardWidth = Math.floor((width - 32 - gap * (perRow - 1)) / perRow);
300
+ return /* @__PURE__ */ jsx(FlatList, { data: p.rows, numColumns: perRow, keyExtractor: (r) => r.id, contentContainerStyle: styles.gallery, columnWrapperStyle: perRow > 1 ? {
301
+ gap
302
+ } : void 0, refreshing: p.refreshing, onRefresh: p.onRefresh, ListFooterComponent: /* @__PURE__ */ jsxs(View, { children: [
303
+ /* @__PURE__ */ jsx(NewRowButton, { p, onPress: () => p.onAddRow() }),
304
+ /* @__PURE__ */ jsx(LoadMore, { p })
305
+ ] }), renderItem: ({
306
+ item: row
307
+ }) => /* @__PURE__ */ jsx(View, { style: {
308
+ width: cardWidth,
309
+ marginBottom: gap
310
+ }, children: /* @__PURE__ */ jsx(Card, { p, row, props: p.cardProps, cover: layout.coverSource === "none" ? void 0 : rowCoverUrl(row.properties, p.allColumns, layout.coverSource) }) }) }, `gallery-${perRow}`);
311
+ }
312
+ const styles = StyleSheet.create({
313
+ tr: {
314
+ flexDirection: "row",
315
+ borderBottomWidth: StyleSheet.hairlineWidth,
316
+ minHeight: 44
317
+ },
318
+ th: {
319
+ minHeight: 36
320
+ },
321
+ thText: {
322
+ fontSize: 13,
323
+ fontWeight: "600"
324
+ },
325
+ cell: {
326
+ flexDirection: "row",
327
+ alignItems: "center",
328
+ paddingHorizontal: 10,
329
+ paddingVertical: 8,
330
+ borderRightWidth: StyleSheet.hairlineWidth
331
+ },
332
+ selectCell: {
333
+ width: 44,
334
+ alignItems: "center",
335
+ justifyContent: "center"
336
+ },
337
+ titleIcon: {
338
+ marginRight: 6
339
+ },
340
+ calc: {
341
+ fontSize: 12
342
+ },
343
+ groupHeader: {
344
+ flexDirection: "row",
345
+ alignItems: "center",
346
+ gap: 8,
347
+ paddingHorizontal: 12,
348
+ paddingVertical: 10
349
+ },
350
+ groupName: {
351
+ fontSize: 14,
352
+ fontWeight: "600"
353
+ },
354
+ count: {
355
+ fontSize: 13
356
+ },
357
+ newRow: {
358
+ flexDirection: "row",
359
+ alignItems: "center",
360
+ gap: 6,
361
+ paddingHorizontal: 12,
362
+ height: 44,
363
+ borderRadius: 10
364
+ },
365
+ newRowText: {
366
+ fontSize: 15
367
+ },
368
+ loadMore: {
369
+ margin: 12,
370
+ height: 42,
371
+ borderRadius: 12,
372
+ alignItems: "center",
373
+ justifyContent: "center"
374
+ },
375
+ loadMoreText: {
376
+ fontSize: 15,
377
+ fontWeight: "600"
378
+ },
379
+ board: {
380
+ padding: 12,
381
+ gap: 12,
382
+ alignItems: "flex-start"
383
+ },
384
+ boardColumn: {
385
+ width: 280
386
+ },
387
+ boardColumnCollapsed: {
388
+ width: 140
389
+ },
390
+ boardCards: {
391
+ gap: 8,
392
+ paddingBottom: 48
393
+ },
394
+ boardTail: {
395
+ width: 160,
396
+ justifyContent: "flex-start"
397
+ },
398
+ boardEmpty: {
399
+ flex: 1,
400
+ alignItems: "center",
401
+ justifyContent: "center",
402
+ padding: 32,
403
+ gap: 8
404
+ },
405
+ boardEmptyTitle: {
406
+ fontSize: 17,
407
+ fontWeight: "700"
408
+ },
409
+ boardEmptyText: {
410
+ fontSize: 14,
411
+ textAlign: "center",
412
+ lineHeight: 20
413
+ },
414
+ card: {
415
+ borderRadius: 12,
416
+ borderWidth: StyleSheet.hairlineWidth,
417
+ overflow: "hidden"
418
+ },
419
+ cardBody: {
420
+ padding: 12,
421
+ gap: 6
422
+ },
423
+ cardTitleRow: {
424
+ flexDirection: "row",
425
+ alignItems: "center",
426
+ gap: 8
427
+ },
428
+ cardProp: {
429
+ minHeight: 0
430
+ },
431
+ cover: {
432
+ width: "100%",
433
+ aspectRatio: 16 / 10
434
+ },
435
+ coverEmpty: {
436
+ alignItems: "center",
437
+ justifyContent: "center"
438
+ },
439
+ listContent: {
440
+ paddingBottom: 48
441
+ },
442
+ listRow: {
443
+ flexDirection: "row",
444
+ alignItems: "center",
445
+ gap: 10,
446
+ paddingHorizontal: 16,
447
+ minHeight: 52,
448
+ borderBottomWidth: StyleSheet.hairlineWidth
449
+ },
450
+ listProps: {
451
+ flexDirection: "row",
452
+ alignItems: "center",
453
+ gap: 6,
454
+ maxWidth: "55%",
455
+ overflow: "hidden"
456
+ },
457
+ gallery: {
458
+ padding: 16,
459
+ paddingBottom: 48
460
+ }
461
+ });export{BoardLayout,GalleryLayout,ListLayout,TableLayout};//# sourceMappingURL=DatabaseLayouts.js.map