@burdenoff/microfe-files 2026.625.3 → 2026.625.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"TabBar.js","names":[],"sources":["../../../src/files/components/TabBar.tsx"],"sourcesContent":["import { Clock, Star, Trash2, Folder } from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { tWithFallback } from \"../utils/i18n\";\n\nexport type TabView = \"all\" | \"recent\" | \"starred\" | \"bin\";\n\ninterface TabBarProps {\n activeTab: TabView;\n onTabChange: (tab: TabView) => void;\n /**\n * Which tabs to render. Order is preserved. Parent filters out\n * feature-flag-gated tabs (e.g. bin/starred) before passing.\n * @default [\"all\", \"recent\", \"starred\", \"bin\"]\n */\n tabs?: TabView[];\n}\n\nconst ALL_TABS: { id: TabView; label: string; icon: React.ReactNode }[] = [\n { id: \"all\", label: \"All Files\", icon: <Folder className=\"size-5\" /> },\n { id: \"recent\", label: \"Recent\", icon: <Clock className=\"size-5\" /> },\n { id: \"starred\", label: \"Starred\", icon: <Star className=\"size-5\" /> },\n { id: \"bin\", label: \"Bin\", icon: <Trash2 className=\"size-5\" /> },\n];\n\nexport function TabBar({\n activeTab,\n onTabChange,\n tabs = [\"all\", \"recent\", \"starred\", \"bin\"],\n}: TabBarProps) {\n const { t } = useI18n();\n const visibleTabs = ALL_TABS.filter((tab) => tabs.includes(tab.id));\n const labels: Record<TabView, string> = {\n all: tWithFallback(t, \"files.browser.tabs.all\", \"All Files\"),\n recent: tWithFallback(t, \"files.browser.tabs.recent\", \"Recent\"),\n starred: tWithFallback(t, \"files.browser.tabs.starred\", \"Starred\"),\n bin: tWithFallback(t, \"files.browser.tabs.bin\", \"Bin\"),\n };\n\n return (\n <div className=\"bg-bg-surface border-b border-border-default\">\n <div className=\"overflow-x-auto px-4 sm:px-6 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]\">\n <nav\n className=\"-mb-px flex min-w-max gap-1\"\n role=\"tablist\"\n aria-label={tWithFallback(\n t,\n \"files.browser.tabs.ariaLabel\",\n \"Files sections\",\n )}\n >\n {visibleTabs.map((tab) => (\n <button\n type=\"button\"\n key={tab.id}\n onClick={() => onTabChange(tab.id)}\n role=\"tab\"\n aria-selected={activeTab === tab.id}\n className={`\n flex items-center gap-2 whitespace-nowrap px-4 py-3 text-sm font-medium border-b-2 transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-border focus-visible:ring-offset-2\n ${\n activeTab === tab.id\n ? \"border-action-primary-bg text-text-primary bg-action-ghost-bg-hover\"\n : \"border-transparent text-text-secondary hover:text-text-primary hover:bg-action-ghost-bg-hover\"\n }\n `}\n >\n {tab.icon}\n {labels[tab.id] ?? tab.label}\n </button>\n ))}\n </nav>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAiBA,IAAM,IAAoE;CACxE;EAAE,IAAI;EAAO,OAAO;EAAa,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;EAAE;CACtE;EAAE,IAAI;EAAU,OAAO;EAAU,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;EAAE;CACrE;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM,kBAAC,GAAD,EAAM,WAAU,UAAW,CAAA;EAAE;CACtE;EAAE,IAAI;EAAO,OAAO;EAAO,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;EAAE;CACjE;AAED,SAAgB,EAAO,EACrB,cACA,gBACA,UAAO;CAAC;CAAO;CAAU;CAAW;CAAM,IAC5B;CACd,IAAM,EAAE,SAAM,GAAS,EACjB,IAAc,EAAS,QAAQ,MAAQ,EAAK,SAAS,EAAI,GAAG,CAAC,EAC7D,IAAkC;EACtC,KAAK,EAAc,GAAG,0BAA0B,YAAY;EAC5D,QAAQ,EAAc,GAAG,6BAA6B,SAAS;EAC/D,SAAS,EAAc,GAAG,8BAA8B,UAAU;EAClE,KAAK,EAAc,GAAG,0BAA0B,MAAM;EACvD;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IACE,WAAU;IACV,MAAK;IACL,cAAY,EACV,GACA,gCACA,iBACD;cAEA,EAAY,KAAK,MAChB,kBAAC,UAAD;KACE,MAAK;KAEL,eAAe,EAAY,EAAI,GAAG;KAClC,MAAK;KACL,iBAAe,MAAc,EAAI;KACjC,WAAW;;kBAGP,MAAc,EAAI,KACd,wEACA,gGACL;;eAZL,CAeG,EAAI,MACJ,EAAO,EAAI,OAAO,EAAI,MAChB;OAfF,EAAI,GAeF,CACT;IACE,CAAA;GACF,CAAA;EACF,CAAA"}
1
+ {"version":3,"file":"TabBar.js","names":[],"sources":["../../../src/files/components/TabBar.tsx"],"sourcesContent":["import { Clock, Star, Trash2, Folder } from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { tWithFallback } from \"../utils/i18n\";\n\nexport type TabView = \"all\" | \"recent\" | \"starred\" | \"bin\";\n\ninterface TabBarProps {\n activeTab: TabView;\n onTabChange: (tab: TabView) => void;\n /**\n * Which tabs to render. Order is preserved. No tab here is feature-flag\n * -gated — Bin, Starred and Recent are always available; the backend serves\n * each view's query directly (subject to RBAC), so there is nothing to gate\n * on the client.\n * @default [\"all\", \"recent\", \"starred\", \"bin\"]\n */\n tabs?: TabView[];\n}\n\nconst ALL_TABS: { id: TabView; label: string; icon: React.ReactNode }[] = [\n { id: \"all\", label: \"All Files\", icon: <Folder className=\"size-5\" /> },\n { id: \"recent\", label: \"Recent\", icon: <Clock className=\"size-5\" /> },\n { id: \"starred\", label: \"Starred\", icon: <Star className=\"size-5\" /> },\n { id: \"bin\", label: \"Bin\", icon: <Trash2 className=\"size-5\" /> },\n];\n\nexport function TabBar({\n activeTab,\n onTabChange,\n tabs = [\"all\", \"recent\", \"starred\", \"bin\"],\n}: TabBarProps) {\n const { t } = useI18n();\n const visibleTabs = ALL_TABS.filter((tab) => tabs.includes(tab.id));\n const labels: Record<TabView, string> = {\n all: tWithFallback(t, \"files.browser.tabs.all\", \"All Files\"),\n recent: tWithFallback(t, \"files.browser.tabs.recent\", \"Recent\"),\n starred: tWithFallback(t, \"files.browser.tabs.starred\", \"Starred\"),\n bin: tWithFallback(t, \"files.browser.tabs.bin\", \"Bin\"),\n };\n\n return (\n <div className=\"bg-bg-surface border-b border-border-default\">\n <div className=\"overflow-x-auto px-4 sm:px-6 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]\">\n <nav\n className=\"-mb-px flex min-w-max gap-1\"\n role=\"tablist\"\n aria-label={tWithFallback(\n t,\n \"files.browser.tabs.ariaLabel\",\n \"Files sections\",\n )}\n >\n {visibleTabs.map((tab) => (\n <button\n type=\"button\"\n key={tab.id}\n onClick={() => onTabChange(tab.id)}\n role=\"tab\"\n aria-selected={activeTab === tab.id}\n className={`\n flex items-center gap-2 whitespace-nowrap px-4 py-3 text-sm font-medium border-b-2 transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-border focus-visible:ring-offset-2\n ${\n activeTab === tab.id\n ? \"border-action-primary-bg text-text-primary bg-action-ghost-bg-hover\"\n : \"border-transparent text-text-secondary hover:text-text-primary hover:bg-action-ghost-bg-hover\"\n }\n `}\n >\n {tab.icon}\n {labels[tab.id] ?? tab.label}\n </button>\n ))}\n </nav>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAmBA,IAAM,IAAoE;CACxE;EAAE,IAAI;EAAO,OAAO;EAAa,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;EAAE;CACtE;EAAE,IAAI;EAAU,OAAO;EAAU,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;EAAE;CACrE;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM,kBAAC,GAAD,EAAM,WAAU,UAAW,CAAA;EAAE;CACtE;EAAE,IAAI;EAAO,OAAO;EAAO,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;EAAE;CACjE;AAED,SAAgB,EAAO,EACrB,cACA,gBACA,UAAO;CAAC;CAAO;CAAU;CAAW;CAAM,IAC5B;CACd,IAAM,EAAE,SAAM,GAAS,EACjB,IAAc,EAAS,QAAQ,MAAQ,EAAK,SAAS,EAAI,GAAG,CAAC,EAC7D,IAAkC;EACtC,KAAK,EAAc,GAAG,0BAA0B,YAAY;EAC5D,QAAQ,EAAc,GAAG,6BAA6B,SAAS;EAC/D,SAAS,EAAc,GAAG,8BAA8B,UAAU;EAClE,KAAK,EAAc,GAAG,0BAA0B,MAAM;EACvD;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IACE,WAAU;IACV,MAAK;IACL,cAAY,EACV,GACA,gCACA,iBACD;cAEA,EAAY,KAAK,MAChB,kBAAC,UAAD;KACE,MAAK;KAEL,eAAe,EAAY,EAAI,GAAG;KAClC,MAAK;KACL,iBAAe,MAAc,EAAI;KACjC,WAAW;;kBAGP,MAAc,EAAI,KACd,wEACA,gGACL;;eAZL,CAeG,EAAI,MACJ,EAAO,EAAI,OAAO,EAAI,MAChB;OAfF,EAAI,GAeF,CACT;IACE,CAAA;GACF,CAAA;EACF,CAAA"}