book-index-ui 0.7.0 → 0.7.2

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.
package/dist/index.d.ts CHANGED
@@ -1034,6 +1034,15 @@ export declare interface EntityOption {
1034
1034
  dynasty?: string;
1035
1035
  }
1036
1036
 
1037
+ export declare const EntityPage: default_2.FC<EntityPageProps>;
1038
+
1039
+ export declare interface EntityPageProps {
1040
+ data: EntityDetailData;
1041
+ transport?: IndexStorage;
1042
+ onNavigate?: (id: string) => void;
1043
+ renderLink?: RenderLink;
1044
+ }
1045
+
1037
1046
  export declare const EntityPickerDialog: default_2.FC<EntityPickerDialogProps>;
1038
1047
 
1039
1048
  declare interface EntityPickerDialogProps {
@@ -1281,6 +1290,14 @@ export declare function FilterChip({ label, active, onClick, dashed }: {
1281
1290
  dashed?: boolean;
1282
1291
  }): JSX.Element;
1283
1292
 
1293
+ /**
1294
+ * 把 `additional_titles` / `attached_texts` 这类
1295
+ * `(string | { book_title })[]` 摊平成字符串数组。
1296
+ */
1297
+ export declare function flattenTitles(items?: (string | {
1298
+ book_title: string;
1299
+ })[]): string[];
1300
+
1284
1301
  /**
1285
1302
  * 简单模板替换
1286
1303
  * formatTemplate('共 {n} 册', { n: 100 }) → '共 100 册'
@@ -2475,6 +2492,12 @@ export declare function normalizeCatalog(raw: unknown): VolumeBookMapping;
2475
2492
 
2476
2493
  export declare function normalizeEra(era: string): string;
2477
2494
 
2495
+ /**
2496
+ * 把原始 role 歸到粗類。
2497
+ * 空值歸「撰」——802 條 null + 121 條空串,絕大多數是錄入時省略的作者本人著作。
2498
+ */
2499
+ export declare function normalizeRole(role?: string | null): RoleClass;
2500
+
2478
2501
  /** volume_index 有 int / number[] / string 三种形态(生产仓实测),统一成 number[] */
2479
2502
  export declare function normalizeVolumeIndex(vi: unknown): number[];
2480
2503
 
@@ -2749,6 +2772,24 @@ export declare type ResourceImportStatus = 'todo' | 'in_progress' | 'done';
2749
2772
  /** 资源导入类型 */
2750
2773
  export declare type ResourceImportType = 'catalog' | 'collection';
2751
2774
 
2775
+ /**
2776
+ * 资源行(含分册展开)。
2777
+ *
2778
+ * 三张页面原先各写了一份:作品页 ResourceLine、版本页 BookResourceLine、
2779
+ * 丛编页 CollectionResourceLine —— 名称解析、note 拼接、分册展开按钮、
2780
+ * 缺册划线的样式全都是复制过去的,其中版本页那份连 VolumeLinks 都内联了
2781
+ * 一遍。合成一个,差异用 props 表达。
2782
+ */
2783
+ export declare function ResourceLine({ item, siblings, showVolumes, fallbackNote, }: {
2784
+ item: ResourceEntry;
2785
+ /** 同组资源,用于给重名条目加区分后缀(史記在 CText 上三条同名) */
2786
+ siblings?: ResourceEntry[];
2787
+ /** 关掉分册展开:册号已在别处逐个列出时(版本页的「收入叢編」) */
2788
+ showVolumes?: boolean;
2789
+ /** note 为空时的兜底(丛编页用 details 补) */
2790
+ fallbackNote?: string;
2791
+ }): JSX.Element;
2792
+
2752
2793
  /**
2753
2794
  * 只读资源列表
2754
2795
  * 用于 kaiyuanguji-web 等场景的资源展示
@@ -2829,6 +2870,34 @@ export declare interface ResourceVolume {
2829
2870
  [key: string]: unknown;
2830
2871
  }
2831
2872
 
2873
+ export declare const ROLE_CLASS_ORDER: RoleClass[];
2874
+
2875
+ /**
2876
+ * 職任歸一。
2877
+ *
2878
+ * 生產倉全量 62,068 條人物—作品關聯裡出現了 **307 種不同寫法**:
2879
+ * 撰 51,247(82.6%)· 作 2,440 · 編 2,008 · 注 1,003 · 修 927 · 纂修 876 …
2880
+ * 長尾則是「等奉敕撰」「舊題撰」「集解」「校正並音釋」這類,
2881
+ * 還混著繁簡兩寫(輯/辑、註/注、刪/删、傳/传、贊/赞)與私用區壞字。
2882
+ *
2883
+ * 不歸一的話篩選 chips 會炸出上百個按鈕,且「撰」與「等奉敕撰」分屬兩組。
2884
+ * 這裡只歸「篩選用的粗類」,原始寫法仍原樣顯示在「職任」列裡——
2885
+ * 「等奉敕撰」與「撰」的區別對版本學是有意義的,不能真的抹掉。
2886
+ */
2887
+ export declare type RoleClass = '撰' | '編' | '注' | '校' | '譯' | '繪' | '其他';
2888
+
2889
+ export declare interface RoleFacet {
2890
+ cls: RoleClass | '全部';
2891
+ label: string;
2892
+ count: number;
2893
+ }
2894
+
2895
+ /** 統計各粗類條數,供篩選 chips 用;空類不出現 */
2896
+ export declare function roleFacets(roles: (string | null | undefined)[]): RoleFacet[];
2897
+
2898
+ /** 行号:统一补零到两位 */
2899
+ export declare function rowNo(i: number): string;
2900
+
2832
2901
  export declare const SearchInput: default_2.FC<SearchInputProps>;
2833
2902
 
2834
2903
  export declare interface SearchInputProps {
@@ -2925,29 +2994,57 @@ export declare interface SyncConfig {
2925
2994
 
2926
2995
  declare type TabKey = 'recommend' | 'catalog' | 'collection' | 'site' | 'feedback';
2927
2996
 
2997
+ /** 表头。窄屏由 CSS 隐藏(meta 折到第二行后表头就没意义了)。 */
2998
+ export declare function TableHead({ spec }: {
2999
+ spec: TableSpec;
3000
+ }): JSX.Element;
3001
+
3002
+ /** 表格行:行号 + 主内容 + meta 组合列。宽度取自与表头同一份 spec。 */
3003
+ export declare function TableRow({ no, main, meta, spec }: {
3004
+ no: default_2.ReactNode;
3005
+ main: default_2.ReactNode;
3006
+ meta: default_2.ReactNode;
3007
+ spec: TableSpec;
3008
+ }): JSX.Element;
3009
+
2928
3010
  /**
2929
- * 表头。columns 描述 meta 区的子列宽度(与行内保持一致)。
2930
- * 窄屏由 CSS 隐藏。
3011
+ * 表格列规格。
3012
+ *
3013
+ * 表头与每一行必须用同一份宽度,否则列会错位。原先三张页面各自把
3014
+ * leadWidth / metaWidth / metaColumns 手抄进 TableHead 和 TableRow 两处
3015
+ * (作品页 22/424、丛编页 26/300、人物页 26/300),改一处忘一处就错位。
3016
+ * 现在一处声明、两处消费。
2931
3017
  */
2932
- export declare function TableHead({ leadWidth, metaWidth, metaColumns, mainLabel }: {
3018
+ export declare interface TableSpec {
3019
+ /** 行号列宽 */
2933
3020
  leadWidth: number;
3021
+ /** meta 区总宽 */
2934
3022
  metaWidth: number;
2935
- metaColumns: {
3023
+ /** meta 区各子列:表头文案 + 宽度 */
3024
+ columns: {
2936
3025
  label: string;
2937
3026
  width: string;
2938
3027
  }[];
3028
+ /** 主列表头文案 */
2939
3029
  mainLabel: string;
2940
- }): JSX.Element;
3030
+ }
2941
3031
 
2942
- /** 表格行:行号 + 主内容 + meta 组合列 */
2943
- export declare function TableRow({ no, main, meta, leadWidth, metaWidth, metaColumns }: {
2944
- no: default_2.ReactNode;
2945
- main: default_2.ReactNode;
2946
- meta: default_2.ReactNode;
2947
- leadWidth: number;
2948
- metaWidth: number;
2949
- metaColumns: string[];
2950
- }): JSX.Element;
3032
+ /**
3033
+ * 标签 + chip 的一行(别名 / 附载篇目 / 附录)。
3034
+ * 作品页的 TagRows 与版本页的 AliasRow 原是同一段样式的两份拷贝。
3035
+ */
3036
+ export declare function TagRow({ label, items }: {
3037
+ label: string;
3038
+ items: string[];
3039
+ }): JSX.Element | null;
3040
+
3041
+ /** 若干 TagRow 竖排 */
3042
+ export declare function TagRows({ rows }: {
3043
+ rows: {
3044
+ label: string;
3045
+ items: string[];
3046
+ }[];
3047
+ }): JSX.Element | null;
2951
3048
 
2952
3049
  /** 文字按钮(排序切换等),带下划线 */
2953
3050
  export declare function TextButton({ label, onClick }: {
@@ -3248,6 +3345,11 @@ export declare interface VolumeDetail {
3248
3345
  file?: string;
3249
3346
  }
3250
3347
 
3348
+ /** 分册链接网格:缺册划线,无链接的册号显示为灰字 */
3349
+ export declare function VolumeLinks({ item }: {
3350
+ item: ResourceEntry;
3351
+ }): JSX.Element;
3352
+
3251
3353
  /** 丛编分部 */
3252
3354
  export declare interface VolumeSection {
3253
3355
  name: string;