@wecom-design/foundation-mobile 0.1.1 → 0.1.3
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.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/components/AppInfo/AppInfo.tsx","../src/components/Camera/Shutter.tsx","../src/components/Camera/CameraBottom.tsx","../src/components/CrossDevice/CrossDevice.tsx","../src/components/CrossDevice/CrossDeviceInfo.tsx","../src/components/ContactsPicker/ContactsPicker.tsx","../src/components/ContactsPicker/SecondaryContactsPicker.tsx","../src/components/ContactsPicker/ContactsTableView.tsx","../src/components/EmoticonSheet/EmoticonSheet.tsx","../src/components/EmoticonSheet/EmoticonGrid.tsx","../src/components/EmoticonSheet/EmoticonItem.tsx"],"sourcesContent":["/**\n * AppInfo / 应用信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证审计:prompts/_audit/foundation-mobile/AppInfo.md\n *\n * 实现策略:消费 mobile 库的 TableView / TableViewCell / SectionFooter\n * 三个原子,仅通过 .wfm-app-info__* 修饰类覆盖与 Figma 真值的差量字段。\n *\n * 变体矩阵(取证已通过):\n * Type: App | Smart App\n *\n * - App / Section 1(描述行 78h):Cell-Left \"应用描述\" + 多行说明\n * - App / Section 2(数据行 56h):标题 + 数值 + chevron\n * - Smart App / Section 1:同 App\n * - Smart App / Section 2(AI 点数行 56h):标题 + ⓘ + Smart Point + 99 点 + chevron\n * - Smart App / Section 3(链接行 56h):标题 + chevron\n */\nimport React from 'react';\nimport {\n TableView,\n TableViewCell,\n SectionFooter,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport './AppInfo.css';\n\nexport type AppInfoType = 'app' | 'smart-app';\n\n/** Header 区:Avatar + 应用名 */\nexport interface AppInfoHeaderData {\n /** Avatar 节点(建议 64×64,由消费侧提供) */\n avatar?: React.ReactNode;\n /** 应用名 */\n title: React.ReactNode;\n}\n\n/** 描述行:Cell-Left \"应用描述\" + 多行说明 */\nexport interface AppInfoDescription {\n /** 左侧标签文案,默认 \"应用描述\" */\n label?: React.ReactNode;\n /** 右侧多行说明文案 */\n text: React.ReactNode;\n}\n\n/** 普通数据/链接行 */\nexport interface AppInfoRow {\n /** 标题 */\n title: React.ReactNode;\n /** 标题右侧的额外 icon(例如 ⓘ) */\n titleExtraRight?: React.ReactNode;\n /** Accessory 区右对齐文本(如 \"99 点\",可选) */\n trailingText?: React.ReactNode;\n /** Accessory 区文本前的额外节点(如 Smart Point 12×12) */\n trailingLeading?: React.ReactNode;\n /** chevron 节点(由消费侧通过 children 注入;缺省不渲染右箭头) */\n chevron?: React.ReactNode;\n /** 点击回调 */\n onClick?: () => void;\n}\n\nexport interface AppInfoProps extends BaseProps {\n /** 类型变体 */\n type?: AppInfoType;\n /** Header 信息 */\n header: AppInfoHeaderData;\n /** Section 1 描述行 */\n description: AppInfoDescription;\n /** 后续 Section 行(每个数组元素 = 一个 Section,由 SectionFooter Blank 8h 间隔) */\n sections: AppInfoRow[][];\n}\n\n/** Header 子组件 */\nconst AppInfoHeader: React.FC<AppInfoHeaderData> = ({ avatar, title }) => (\n <div className=\"wfm-app-info__header\">\n {avatar !== undefined && (\n <div className=\"wfm-app-info__header-avatar\">{avatar}</div>\n )}\n <div className=\"wfm-app-info__header-title\">{title}</div>\n <div className=\"wfm-app-info__header-separator\" />\n </div>\n);\n\nexport const AppInfo: React.FC<AppInfoProps> = ({\n type = 'app',\n header,\n description,\n sections,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-app-info',\n `wfm-app-info--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <AppInfoHeader {...header} />\n\n {/* Section 1 — 描述行(78h,Cell-Left \"应用描述\" + 多行说明) */}\n <TableView tableStyle=\"plain\" separator={false}>\n <TableViewCell\n className=\"wfm-app-info__desc-row\"\n left={\n <span className=\"wfm-app-info__desc-label\">\n {description.label ?? '应用描述'}\n </span>\n }\n title={\n <span className=\"wfm-app-info__desc-text\">{description.text}</span>\n }\n />\n </TableView>\n\n {/* 后续 Section(每个 Section 之间 SectionFooter Blank 8h) */}\n {sections.map((rows, idx) => (\n <React.Fragment key={idx}>\n <SectionFooter type=\"blank\" />\n <TableView tableStyle=\"plain\" separator>\n {rows.map((row, rIdx) => (\n <TableViewCell\n key={rIdx}\n className=\"wfm-app-info__row\"\n title={row.title}\n titleExtraRight={row.titleExtraRight}\n accessory={\n row.trailingText !== undefined ||\n row.trailingLeading !== undefined ||\n row.chevron !== undefined ? (\n <>\n {row.trailingLeading !== undefined && (\n <span className=\"wfm-app-info__row-leading\">\n {row.trailingLeading}\n </span>\n )}\n {row.trailingText !== undefined && (\n <span className=\"wfm-app-info__row-text\">\n {row.trailingText}\n </span>\n )}\n {row.chevron !== undefined && (\n <span className=\"wfm-app-info__row-chevron\">\n {row.chevron}\n </span>\n )}\n </>\n ) : undefined\n }\n accessoryType={row.chevron !== undefined ? 'chevron' : undefined}\n onClick={row.onClick}\n />\n ))}\n </TableView>\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nAppInfo.displayName = 'AppInfo';\n","/**\n * Shutter / 快门 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md §1.3 / §6\n * 节点 22725:442897 / Type=Default / 68×68\n *\n * Shutter 不是图标资产(user override 2026-06-24),是组件自带几何:\n * 68×68 白描边空心圆,描边宽度 4px 由 screenshot 视觉确定。\n */\nimport React, { forwardRef } from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './Shutter.css';\n\nexport interface ShutterProps extends BaseProps {}\n\nexport const Shutter = forwardRef<HTMLDivElement, ShutterProps>(\n ({ className = '', style }, ref) => {\n const cls = ['wfm-shutter', className].filter(Boolean).join(' ');\n return <div ref={ref} className={cls} style={style} role=\"img\" aria-label=\"快门\" />;\n }\n);\n\nShutter.displayName = 'Shutter';\n","/**\n * CameraBottom / 相机底部 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md\n * - Type=Default 节点 22726:450517(402×158,含 Shutter + Tab)\n * - Type=Done 节点 22848:444585(402×158,无 Shutter,Tab 留 28h spacer)\n *\n * 实现策略:消费 mobile 库 BarControlLeft / BarControlRight / BarButton 三个原子,\n * 仅通过 .wfm-camera-bottom__* 修饰类覆盖 Camera 深色背景下与 Figma 真值的差量字段\n * (文字白色 + 内部高度 + flex:1)。Tab 区与外层布局 wfm 自实现。\n *\n * BLOCKED 字段(Camera.md §4,CSS 中保留 TODO):\n * BLK-1 Content py=14、BLK-2 pl/pr=18、BLK-3 内部高度 44/68、\n * BLK-4 Done Tab spacer=28、BLK-5 Home Indicator(不实现,仅留 props 槽)。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。Tab 项「选中色」是数据驱动的颜色变化。\n */\nimport React from 'react';\nimport {\n BarControlLeft,\n BarControlRight,\n BarButton,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport { Shutter } from './Shutter';\nimport './CameraBottom.css';\n\nexport type CameraBottomType = 'default' | 'done';\n\nexport type CameraTabKey = 'video' | 'photo' | 'document';\n\nexport interface CameraTabItem {\n key: CameraTabKey;\n label: React.ReactNode;\n}\n\nexport interface CameraBottomProps extends BaseProps {\n /** Type=Default | Done(Figma Variant) */\n type?: CameraBottomType;\n\n /* ═══ Default 专属:Tab + Shutter ═══ */\n /** Tab 列表(仅 Default)。缺省 [视频, 照片, 文档] */\n tabs?: CameraTabItem[];\n /** 当前选中 Tab key(仅 Default)。缺省 'photo' */\n activeTab?: CameraTabKey;\n /** Tab 切换回调 */\n onTabChange?: (key: CameraTabKey) => void;\n /** Shutter 自定义节点(缺省渲染默认 Shutter 几何) */\n shutter?: React.ReactNode;\n /** Shutter 点击回调(仅 Default) */\n onShutter?: () => void;\n\n /* ═══ 左右按钮(Default | Done 共有,文案不同) ═══ */\n /** 左侧按钮文本(Default 缺省「取消」,Done 缺省「重拍」) */\n leftLabel?: React.ReactNode;\n onLeftClick?: () => void;\n /** 右侧按钮文本(Default 缺省「文本」,Done 缺省「使用照片」) */\n rightLabel?: React.ReactNode;\n onRightClick?: () => void;\n\n /* ═══ Home Indicator(Camera.md BLK-5:不在本组件实现) ═══ */\n /** 是否预留底部安全区。本组件仅留视觉占位,不渲染 Home Indicator 视觉(待 HomeIndicator 大类落地) */\n homeIndicator?: boolean;\n}\n\nconst DEFAULT_TABS: CameraTabItem[] = [\n { key: 'video', label: '视频' },\n { key: 'photo', label: '照片' },\n { key: 'document', label: '文档' },\n];\n\nexport const CameraBottom: React.FC<CameraBottomProps> = ({\n type = 'default',\n tabs = DEFAULT_TABS,\n activeTab = 'photo',\n onTabChange,\n shutter,\n onShutter,\n leftLabel,\n onLeftClick,\n rightLabel,\n onRightClick,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const isDefault = type === 'default';\n const isDone = type === 'done';\n\n const cls = [\n 'wfm-camera-bottom',\n `wfm-camera-bottom--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n /* 左右按钮文本:Default = 取消 / 文本(Regular),Done = 重拍 / 使用照片(右侧 body_strong = Medium)*/\n const resolvedLeft = leftLabel ?? (isDone ? '重拍' : '取消');\n const resolvedRight = rightLabel ?? (isDone ? '使用照片' : '文本');\n\n return (\n <div className={cls} style={style}>\n {/* ─── Tab 区 ─── */}\n {isDefault ? (\n <div className=\"wfm-camera-bottom__tab\" role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.key === activeTab;\n return (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={[\n 'wfm-camera-bottom__tab-item',\n isActive && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n ) : (\n /* Done 态:28h 空 spacer(BLK-4,无 token 来源) */\n <div className=\"wfm-camera-bottom__tab wfm-camera-bottom__tab--spacer\" />\n )}\n\n {/* ─── Content 区:左按钮 + Shutter(仅 Default)+ 右按钮 ─── */}\n <div className=\"wfm-camera-bottom__content\">\n <BarControlLeft className=\"wfm-camera-bottom__action wfm-camera-bottom__action--left\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedLeft}\n onClick={onLeftClick}\n className=\"wfm-camera-bottom__bar-button\"\n />\n </BarControlLeft>\n\n {isDefault && (\n <button\n type=\"button\"\n className=\"wfm-camera-bottom__shutter-slot\"\n onClick={onShutter}\n aria-label=\"拍摄\"\n >\n {shutter ?? <Shutter />}\n </button>\n )}\n\n <BarControlRight className=\"wfm-camera-bottom__action wfm-camera-bottom__action--right\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedRight}\n onClick={onRightClick}\n className={[\n 'wfm-camera-bottom__bar-button',\n isDone && 'wfm-camera-bottom__bar-button--strong',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </BarControlRight>\n </div>\n\n {/* ─── Home Indicator 占位(BLK-5,不实现视觉) ─── */}\n {homeIndicator && <div className=\"wfm-camera-bottom__home-indicator\" />}\n </div>\n );\n};\n\nCameraBottom.displayName = 'CameraBottom';\n","/**\n * CrossDevice / 跨设备 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 18629:394998 / Type=Default / 402×720\n *\n * 实现策略:消费 mobile 库 Button + general 库 IllustrationCrossDevice,\n * 仅通过 .wfm-cross-device__* 修饰类组装外壳与覆盖差量字段。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4,CSS 中保留 TODO):\n * BLK-1 Button py=9、BLK-3 Top Text width=289、BLK-4 Button width=224\n */\nimport React from 'react';\nimport { Button, type BaseProps } from '@wecom-design/mobile';\nimport { Graphic } from '@wecom-design/general';\nimport './CrossDevice.css';\n\nexport interface CrossDeviceProps extends BaseProps {\n /** 主文本(缺省「文本」) */\n text?: React.ReactNode;\n /** 自定义插画节点;缺省渲染 @wecom-design/general 的 IllustrationCrossDevice */\n illustration?: React.ReactNode;\n /** 按钮文本(缺省「文本」) */\n buttonLabel?: React.ReactNode;\n /** 按钮点击回调 */\n onButtonClick?: () => void;\n}\n\nexport const CrossDevice: React.FC<CrossDeviceProps> = ({\n text = '文本',\n illustration,\n buttonLabel = '文本',\n onButtonClick,\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device__content\">\n <div className=\"wfm-cross-device__top\">\n <div className=\"wfm-cross-device__text\">\n <p>{text}</p>\n </div>\n <div className=\"wfm-cross-device__illustration\">\n {illustration ?? (\n <Graphic.Illustration.IllustrationCrossDevice width={224} height={224} />\n )}\n </div>\n </div>\n\n <Button\n className=\"wfm-cross-device__button\"\n color=\"blue\"\n size=\"medium\"\n onClick={onButtonClick}\n >\n {buttonLabel}\n </Button>\n </div>\n </div>\n );\n};\n\nCrossDevice.displayName = 'CrossDevice';\n","/**\n * CrossDeviceInfo / 跨设备域名信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 19831:418328 / Type=Default / 402×92\n *\n * 用途:CrossDevice 主组件之外的次级提示卡,展示「在 work.weixin.qq.com/login 登录」类指引。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4):\n * BLK-2 URL 字号 17/Semibold —— 字典在本节点未命中;CSS 用同值 var + font-weight: 600 + TODO\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './CrossDeviceInfo.css';\n\nexport interface CrossDeviceInfoProps extends BaseProps {\n /** 提示文本(缺省「文本」) */\n text?: React.ReactNode;\n /** URL 文本(缺省「work.weixin.qq.com/login」) */\n url?: React.ReactNode;\n}\n\nexport const CrossDeviceInfo: React.FC<CrossDeviceInfoProps> = ({\n text = '文本',\n url = 'work.weixin.qq.com/login',\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device-info', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device-info__content\">\n <p className=\"wfm-cross-device-info__label\">{text}</p>\n <p className=\"wfm-cross-device-info__url\">{url}</p>\n </div>\n </div>\n );\n};\n\nCrossDeviceInfo.displayName = 'CrossDeviceInfo';\n","/**\n * ContactsPicker / 联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md\n * 主组件 6 Variant:Type=Default|Range × Segment=None|Organization|Tags × Status=Default|Searching\n *\n * 实现策略:消费 mobile 库 SearchBox + SegmentedControl + TableView 三个原子,\n * 仅做\"分组容器 + Section Header + 槽位组装\"。Cell 内容由消费侧通过 children 注入。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度(Type/Segment/Status 是数据驱动 Variant)。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-2 cell 内部细节(委托 mobile/TableViewCell)、BLK-3 已选数字 chip、\n * BLK-4 A-Z 索引侧栏(待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport {\n SearchBox,\n SegmentedControl,\n type BaseProps,\n type SegmentedControlOptionItem,\n} from '@wecom-design/mobile';\nimport './ContactsPicker.css';\n\nexport type ContactsPickerType = 'default' | 'range';\nexport type ContactsPickerSegment = 'none' | 'organization' | 'tags';\nexport type ContactsPickerStatus = 'default' | 'searching';\n\nexport interface ContactsPickerSection {\n /** Section header 文本(如 \"已选联系人 (1)\"、\"最近联系人\") */\n header?: React.ReactNode;\n /** Section 内容(一组 Cell,由消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children: React.ReactNode;\n}\n\nexport interface ContactsPickerProps extends BaseProps {\n /** Figma Variant:Default | Range */\n type?: ContactsPickerType;\n /** Figma Variant:仅 Range 类型有效(None | Organization | Tags) */\n segment?: ContactsPickerSegment;\n /** Figma Variant:Default | Searching */\n status?: ContactsPickerStatus;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n /** Searching 状态下\"取消\"按钮回调(只在 status=\"searching\" 时有效) */\n onSearchCancel?: () => void;\n /** 搜索文本(受控) */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n\n /** Range 类型的 Tabs 选项;缺省 [{组织架构}, {标签}] */\n segmentOptions?: SegmentedControlOptionItem[];\n /** 当前 Tab 值(受控) */\n segmentValue?: string;\n onSegmentChange?: (value: string) => void;\n\n /** Section 列表(消费侧填充) */\n sections?: ContactsPickerSection[];\n /** 直接放进列表区域的自定义节点(覆盖 sections) */\n children?: React.ReactNode;\n}\n\nconst DEFAULT_SEGMENT_OPTIONS: SegmentedControlOptionItem[] = [\n { value: 'organization', label: '组织架构' },\n { value: 'tags', label: '标签' },\n];\n\nexport const ContactsPicker: React.FC<ContactsPickerProps> = ({\n type = 'default',\n segment = 'none',\n status = 'default',\n searchBar = true,\n onSearchCancel,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n segmentOptions,\n segmentValue,\n onSegmentChange,\n sections,\n children,\n className = '',\n style,\n}) => {\n const isRange = type === 'range';\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-contacts-picker',\n `wfm-contacts-picker--${type}`,\n isRange && `wfm-contacts-picker--segment-${segment}`,\n `wfm-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const resolvedSegmentOptions = segmentOptions ?? DEFAULT_SEGMENT_OPTIONS;\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {isRange && (\n <div className=\"wfm-contacts-picker__segment\">\n <SegmentedControl\n options={resolvedSegmentOptions}\n value={segmentValue}\n onChange={onSegmentChange}\n />\n </div>\n )}\n\n <div className=\"wfm-contacts-picker__list\">\n {children}\n {sections?.map((section, idx) => (\n <section key={idx} className=\"wfm-contacts-picker__section\">\n {section.header !== undefined && (\n <div className=\"wfm-contacts-picker__section-header\">\n {section.header}\n </div>\n )}\n {section.children}\n </section>\n ))}\n </div>\n </div>\n );\n};\n\nContactsPicker.displayName = 'ContactsPicker';\n","/**\n * SecondaryContactsPicker / 次级联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.2\n * 4 Variant:Type=My Customers|Company Contacts|WeChat Contacts × Status=Default|Searching\n *\n * 用于 ContactsPicker 选中某分类后展开的二级页面(\"我的客户\"/\"企业通讯录\"/\"微信通讯录\")。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-3 已选数字 chip、BLK-4 A-Z 索引侧栏(待 IndexBar 大类)\n */\nimport React from 'react';\nimport { SearchBox, type BaseProps } from '@wecom-design/mobile';\nimport './SecondaryContactsPicker.css';\n\nexport type SecondaryContactsPickerType =\n | 'my-customers'\n | 'company-contacts'\n | 'wechat-contacts';\n\nexport type SecondaryContactsPickerStatus = 'default' | 'searching';\n\nexport interface SecondaryContactsPickerProps extends BaseProps {\n type?: SecondaryContactsPickerType;\n status?: SecondaryContactsPickerStatus;\n\n /** 顶部筛选 / 面包屑文本(如 \"根据标签筛选 ∨\"、\"企业通讯录 / 产品部\"),缺省不显示 */\n filter?: React.ReactNode;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n onSearchCancel?: () => void;\n\n /** 列表内容(消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children?: React.ReactNode;\n}\n\nexport const SecondaryContactsPicker: React.FC<SecondaryContactsPickerProps> = ({\n type = 'my-customers',\n status = 'default',\n filter,\n searchBar = true,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n onSearchCancel,\n children,\n className = '',\n style,\n}) => {\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-secondary-contacts-picker',\n `wfm-secondary-contacts-picker--${type}`,\n `wfm-secondary-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-secondary-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-secondary-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {filter !== undefined && (\n <div className=\"wfm-secondary-contacts-picker__filter\">{filter}</div>\n )}\n\n <div className=\"wfm-secondary-contacts-picker__list\">{children}</div>\n </div>\n );\n};\n\nSecondaryContactsPicker.displayName = 'SecondaryContactsPicker';\n","/**\n * ContactsTableView / 联系人列表视图(部件)[Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.3 / §1.6\n * 6 Variant:Type=Recent Contacts|Organization|Tags × Status=Default|Searching\n *\n * 用作 ContactsPicker / SecondaryContactsPicker 的子部件,渲染单一类型的联系人/组织/标签列表。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-4 A-Z 索引侧栏(本组件保留 indexBar 槽,待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './ContactsTableView.css';\n\nexport type ContactsTableViewType = 'recent-contacts' | 'organization' | 'tags';\nexport type ContactsTableViewStatus = 'default' | 'searching';\n\nexport interface ContactsTableViewProps extends BaseProps {\n type?: ContactsTableViewType;\n status?: ContactsTableViewStatus;\n\n /** 列表内容(消费侧填充 mobile 库 TableViewCell) */\n children?: React.ReactNode;\n\n /** A-Z 索引侧栏节点(BLK-4,待 IndexBar 大类完成后由消费侧注入) */\n indexBar?: React.ReactNode;\n}\n\nexport const ContactsTableView: React.FC<ContactsTableViewProps> = ({\n type = 'recent-contacts',\n status = 'default',\n children,\n indexBar,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-contacts-table-view',\n `wfm-contacts-table-view--${type}`,\n `wfm-contacts-table-view--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-contacts-table-view__list\">{children}</div>\n {indexBar !== undefined && (\n <div className=\"wfm-contacts-table-view__index-bar\">{indexBar}</div>\n )}\n </div>\n );\n};\n\nContactsTableView.displayName = 'ContactsTableView';\n","/**\n * EmoticonSheet / 表情面板 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.1 / §1.1\n * 1 Variant:Type=Default(402×386)\n *\n * 实现策略:本组件提供\"Tab Bar + 内容 + Bottom Bar\"三段式外壳容器。\n * 内容(Section header + EmoticonGrid + EmoticonItem)由消费侧通过 children 组合。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-2(Home Indicator h=34,token 包未导出 safe_area_ios var)、\n * BLK-4(Tab Bar 高度估算)、BLK-5(Bottom Bar 高度自然撑开)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonSheet.css';\n\nexport interface EmoticonSheetTab {\n key: string;\n /** Tab icon 节点(消费侧注入) */\n icon: React.ReactNode;\n active?: boolean;\n}\n\nexport interface EmoticonSheetProps extends BaseProps {\n /** Tab Bar 选项 */\n tabs?: EmoticonSheetTab[];\n onTabChange?: (key: string) => void;\n\n /** 主内容(一组 Section header + EmoticonGrid,由消费侧组装) */\n children?: React.ReactNode;\n\n /** 删除按钮点击回调(缺省渲染) */\n onDelete?: () => void;\n /** 自定义删除按钮节点(缺省渲染默认外形) */\n deleteSlot?: React.ReactNode;\n\n /** 发送按钮文本(缺省「发送」) */\n sendLabel?: React.ReactNode;\n onSend?: () => void;\n /** 发送按钮是否禁用 */\n sendDisabled?: boolean;\n\n /** 是否预留底部安全区(Home Indicator 占位) */\n homeIndicator?: boolean;\n}\n\nexport const EmoticonSheet: React.FC<EmoticonSheetProps> = ({\n tabs,\n onTabChange,\n children,\n onDelete,\n deleteSlot,\n sendLabel = '发送',\n onSend,\n sendDisabled = false,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const cls = ['wfm-emoticon-sheet', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n {tabs && tabs.length > 0 && (\n <div className=\"wfm-emoticon-sheet__tab-bar\" role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.active}\n className={[\n 'wfm-emoticon-sheet__tab',\n tab.active && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.icon}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"wfm-emoticon-sheet__content\">{children}</div>\n\n <div className=\"wfm-emoticon-sheet__bottom-bar\">\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__delete\"\n onClick={onDelete}\n aria-label=\"删除\"\n >\n {deleteSlot}\n </button>\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__send\"\n onClick={onSend}\n disabled={sendDisabled}\n >\n {sendLabel}\n </button>\n </div>\n\n {homeIndicator && <div className=\"wfm-emoticon-sheet__home-indicator\" />}\n </div>\n );\n};\n\nEmoticonSheet.displayName = 'EmoticonSheet';\n","/**\n * EmoticonGrid / 表情网格 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.2 / §1.2-§1.4\n * 3 Variant:Type=WeChat Face(7 列)| Favorites(4 列)| Big Face(4 列)\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-3(行/列 gap 字典无独立 token,估算 space_small_xl=8)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonGrid.css';\n\nexport type EmoticonGridType = 'wechat-face' | 'favorites' | 'big-face';\n\nexport interface EmoticonGridProps extends BaseProps {\n type?: EmoticonGridType;\n /** Cell 内容(消费侧用 EmoticonItem 渲染) */\n children?: React.ReactNode;\n}\n\nexport const EmoticonGrid: React.FC<EmoticonGridProps> = ({\n type = 'wechat-face',\n children,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-grid',\n `wfm-emoticon-grid--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n};\n\nEmoticonGrid.displayName = 'EmoticonGrid';\n","/**\n * EmoticonItem / 表情项 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.3 / §1.5-§1.7\n * 6 Variant:Type=WeChat Face | Favorites | WeChat Big Face × State=Normal | Pressed\n *\n * 状态:含 §9.1 State Variant(Normal | Pressed),无 Selection/Focus 维度。\n *\n * BLOCKED:BLK-1(Pressed 视觉变淡程度,字典空,opacity:0.5 user override)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonItem.css';\n\nexport type EmoticonItemType = 'wechat-face' | 'favorites' | 'big-face';\nexport type EmoticonItemState = 'normal' | 'pressed';\n\nexport interface EmoticonItemProps extends BaseProps {\n type?: EmoticonItemType;\n /** 显式 pressed 状态(受控);缺省由 :active 伪类驱动 */\n state?: EmoticonItemState;\n /** 主体内容:emoji glyph、收藏图片、Big Face 圆形 emoji 等 */\n children?: React.ReactNode;\n /** Big Face 下方文本标签(仅 type=big-face 渲染) */\n label?: React.ReactNode;\n /** Favorites 底部水印文本(仅 type=favorites 渲染) */\n watermark?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const EmoticonItem: React.FC<EmoticonItemProps> = ({\n type = 'wechat-face',\n state = 'normal',\n children,\n label,\n watermark,\n onClick,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-item',\n `wfm-emoticon-item--${type}`,\n state === 'pressed' && 'is-pressed',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type=\"button\" className={cls} style={style} onClick={onClick}>\n <span className=\"wfm-emoticon-item__body\">{children}</span>\n {type === 'favorites' && watermark !== undefined && (\n <span className=\"wfm-emoticon-item__watermark\">{watermark}</span>\n )}\n {type === 'big-face' && label !== undefined && (\n <span className=\"wfm-emoticon-item__label\">{label}</span>\n )}\n </button>\n );\n};\n\nEmoticonItem.displayName = 'EmoticonItem';\n"],"names":["AppInfoHeader","avatar","title","jsxs","jsx","AppInfo","type","header","description","sections","className","style","cls","TableView","TableViewCell","rows","idx","React","SectionFooter","row","rIdx","Fragment","Shutter","forwardRef","ref","DEFAULT_TABS","CameraBottom","tabs","activeTab","onTabChange","shutter","onShutter","leftLabel","onLeftClick","rightLabel","onRightClick","homeIndicator","isDefault","isDone","resolvedLeft","resolvedRight","tab","isActive","BarControlLeft","BarButton","BarControlRight","CrossDevice","text","illustration","buttonLabel","onButtonClick","Graphic","Button","CrossDeviceInfo","url","DEFAULT_SEGMENT_OPTIONS","ContactsPicker","segment","status","searchBar","onSearchCancel","searchValue","onSearchChange","searchPlaceholder","segmentOptions","segmentValue","onSegmentChange","children","isRange","isSearching","resolvedSegmentOptions","SearchBox","SegmentedControl","section","SecondaryContactsPicker","filter","ContactsTableView","indexBar","EmoticonSheet","onDelete","deleteSlot","sendLabel","onSend","sendDisabled","EmoticonGrid","EmoticonItem","state","label","watermark","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/components/AppInfo/AppInfo.tsx","../src/components/Camera/Shutter.tsx","../src/components/Camera/CameraBottom.tsx","../src/components/CrossDevice/CrossDevice.tsx","../src/components/CrossDevice/CrossDeviceInfo.tsx","../src/components/ContactsPicker/ContactsPicker.tsx","../src/components/ContactsPicker/SecondaryContactsPicker.tsx","../src/components/ContactsPicker/ContactsTableView.tsx","../src/components/EmoticonSheet/EmoticonSheet.tsx","../src/components/EmoticonSheet/EmoticonGrid.tsx","../src/components/EmoticonSheet/EmoticonItem.tsx"],"sourcesContent":["/**\n * AppInfo / 应用信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证审计:prompts/_audit/foundation-mobile/AppInfo.md\n *\n * 实现策略:消费 mobile 库的 TableView / TableViewCell / SectionFooter\n * 三个原子,仅通过 .wfm-app-info__* 修饰类覆盖与 Figma 真值的差量字段。\n *\n * 变体矩阵(取证已通过):\n * Type: App | Smart App\n *\n * - App / Section 1(描述行 78h):Cell-Left \"应用描述\" + 多行说明\n * - App / Section 2(数据行 56h):标题 + 数值 + chevron\n * - Smart App / Section 1:同 App\n * - Smart App / Section 2(AI 点数行 56h):标题 + ⓘ + Smart Point + 99 点 + chevron\n * - Smart App / Section 3(链接行 56h):标题 + chevron\n */\nimport React from 'react';\nimport {\n TableView,\n TableViewCell,\n SectionFooter,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport './AppInfo.css';\n\nexport type AppInfoType = 'app' | 'smart-app';\n\n/** Header 区:Avatar + 应用名 */\nexport interface AppInfoHeaderData {\n /** Avatar 节点(建议 64×64,由消费侧提供) */\n avatar?: React.ReactNode;\n /** 应用名 */\n title: React.ReactNode;\n}\n\n/** 描述行:Cell-Left \"应用描述\" + 多行说明 */\nexport interface AppInfoDescription {\n /** 左侧标签文案,默认 \"应用描述\" */\n label?: React.ReactNode;\n /** 右侧多行说明文案 */\n text: React.ReactNode;\n}\n\n/** 普通数据/链接行 */\nexport interface AppInfoRow {\n /** 标题 */\n title: React.ReactNode;\n /** 标题右侧的额外 icon(例如 ⓘ) */\n titleExtraRight?: React.ReactNode;\n /** Accessory 区右对齐文本(如 \"99 点\",可选) */\n trailingText?: React.ReactNode;\n /** Accessory 区文本前的额外节点(如 Smart Point 12×12) */\n trailingLeading?: React.ReactNode;\n /** chevron 节点(由消费侧通过 children 注入;缺省不渲染右箭头) */\n chevron?: React.ReactNode;\n /** 点击回调 */\n onClick?: () => void;\n}\n\nexport interface AppInfoProps extends BaseProps {\n /** 类型变体 */\n type?: AppInfoType;\n /** Header 信息 */\n header: AppInfoHeaderData;\n /** Section 1 描述行 */\n description: AppInfoDescription;\n /** 后续 Section 行(每个数组元素 = 一个 Section,由 SectionFooter Blank 8h 间隔) */\n sections: AppInfoRow[][];\n}\n\n/** Header 子组件 */\nconst AppInfoHeader: React.FC<AppInfoHeaderData> = ({ avatar, title }) => (\n <div className=\"wfm-app-info__header\">\n {avatar !== undefined && (\n <div className=\"wfm-app-info__header-avatar\">{avatar}</div>\n )}\n <div className=\"wfm-app-info__header-title\">{title}</div>\n <div className=\"wfm-app-info__header-separator\" />\n </div>\n);\n\nexport const AppInfo: React.FC<AppInfoProps> = ({\n type = 'app',\n header,\n description,\n sections,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-app-info',\n `wfm-app-info--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <AppInfoHeader {...header} />\n\n {/* Section 1 — 描述行(78h,Cell-Left \"应用描述\" + 多行说明) */}\n <TableView tableStyle=\"plain\" separator={false}>\n <TableViewCell\n className=\"wfm-app-info__desc-row\"\n left={\n <span className=\"wfm-app-info__desc-label\">\n {description.label ?? '应用描述'}\n </span>\n }\n title={\n <span className=\"wfm-app-info__desc-text\">{description.text}</span>\n }\n />\n </TableView>\n\n {/* 后续 Section(每个 Section 之间 SectionFooter Blank 8h) */}\n {sections.map((rows, idx) => (\n <React.Fragment key={idx}>\n <SectionFooter type=\"blank\" />\n <TableView tableStyle=\"plain\" separator>\n {rows.map((row, rIdx) => (\n <TableViewCell\n key={rIdx}\n className=\"wfm-app-info__row\"\n title={row.title}\n titleExtraRight={row.titleExtraRight}\n accessory={\n row.trailingText !== undefined ||\n row.trailingLeading !== undefined ||\n row.chevron !== undefined ? (\n <>\n {row.trailingLeading !== undefined && (\n <span className=\"wfm-app-info__row-leading\">\n {row.trailingLeading}\n </span>\n )}\n {row.trailingText !== undefined && (\n <span className=\"wfm-app-info__row-text\">\n {row.trailingText}\n </span>\n )}\n {row.chevron !== undefined && (\n <span className=\"wfm-app-info__row-chevron\">\n {row.chevron}\n </span>\n )}\n </>\n ) : undefined\n }\n accessoryType={row.chevron !== undefined ? 'chevron' : undefined}\n onClick={row.onClick}\n />\n ))}\n </TableView>\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nAppInfo.displayName = 'AppInfo';\n","/**\n * Shutter / 快门 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md §1.3 / §6\n * 节点 22725:442897 / Type=Default / 68×68\n *\n * Shutter 不是图标资产(user override 2026-06-24),是组件自带几何:\n * 68×68 白描边空心圆,描边宽度 4px 由 screenshot 视觉确定。\n */\nimport { forwardRef } from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './Shutter.css';\n\nexport interface ShutterProps extends BaseProps {}\n\nexport const Shutter = forwardRef<HTMLDivElement, ShutterProps>(\n ({ className = '', style }, ref) => {\n const cls = ['wfm-shutter', className].filter(Boolean).join(' ');\n return <div ref={ref} className={cls} style={style} role=\"img\" aria-label=\"快门\" />;\n }\n);\n\nShutter.displayName = 'Shutter';\n","/**\n * CameraBottom / 相机底部 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md\n * - Type=Default 节点 22726:450517(402×158,含 Shutter + Tab)\n * - Type=Done 节点 22848:444585(402×158,无 Shutter,Tab 留 28h spacer)\n *\n * 实现策略:消费 mobile 库 BarControlLeft / BarControlRight / BarButton 三个原子,\n * 仅通过 .wfm-camera-bottom__* 修饰类覆盖 Camera 深色背景下与 Figma 真值的差量字段\n * (文字白色 + 内部高度 + flex:1)。Tab 区与外层布局 wfm 自实现。\n *\n * BLOCKED 字段(Camera.md §4,CSS 中保留 TODO):\n * BLK-1 Content py=14、BLK-2 pl/pr=18、BLK-3 内部高度 44/68、\n * BLK-4 Done Tab spacer=28、BLK-5 Home Indicator(不实现,仅留 props 槽)。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。Tab 项「选中色」是数据驱动的颜色变化。\n */\nimport React from 'react';\nimport {\n BarControlLeft,\n BarControlRight,\n BarButton,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport { Shutter } from './Shutter';\nimport './CameraBottom.css';\n\nexport type CameraBottomType = 'default' | 'done';\n\nexport type CameraTabKey = 'video' | 'photo' | 'document';\n\nexport interface CameraTabItem {\n key: CameraTabKey;\n label: React.ReactNode;\n}\n\nexport interface CameraBottomProps extends BaseProps {\n /** Type=Default | Done(Figma Variant) */\n type?: CameraBottomType;\n\n /* ═══ Default 专属:Tab + Shutter ═══ */\n /** Tab 列表(仅 Default)。缺省 [视频, 照片, 文档] */\n tabs?: CameraTabItem[];\n /** 当前选中 Tab key(仅 Default)。缺省 'photo' */\n activeTab?: CameraTabKey;\n /** Tab 切换回调 */\n onTabChange?: (key: CameraTabKey) => void;\n /** Shutter 自定义节点(缺省渲染默认 Shutter 几何) */\n shutter?: React.ReactNode;\n /** Shutter 点击回调(仅 Default) */\n onShutter?: () => void;\n\n /* ═══ 左右按钮(Default | Done 共有,文案不同) ═══ */\n /** 左侧按钮文本(Default 缺省「取消」,Done 缺省「重拍」) */\n leftLabel?: React.ReactNode;\n onLeftClick?: () => void;\n /** 右侧按钮文本(Default 缺省「文本」,Done 缺省「使用照片」) */\n rightLabel?: React.ReactNode;\n onRightClick?: () => void;\n\n /* ═══ Home Indicator(Camera.md BLK-5:不在本组件实现) ═══ */\n /** 是否预留底部安全区。本组件仅留视觉占位,不渲染 Home Indicator 视觉(待 HomeIndicator 大类落地) */\n homeIndicator?: boolean;\n}\n\nconst DEFAULT_TABS: CameraTabItem[] = [\n { key: 'video', label: '视频' },\n { key: 'photo', label: '照片' },\n { key: 'document', label: '文档' },\n];\n\nexport const CameraBottom: React.FC<CameraBottomProps> = ({\n type = 'default',\n tabs = DEFAULT_TABS,\n activeTab = 'photo',\n onTabChange,\n shutter,\n onShutter,\n leftLabel,\n onLeftClick,\n rightLabel,\n onRightClick,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const isDefault = type === 'default';\n const isDone = type === 'done';\n\n const cls = [\n 'wfm-camera-bottom',\n `wfm-camera-bottom--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n /* 左右按钮文本:Default = 取消 / 文本(Regular),Done = 重拍 / 使用照片(右侧 body_strong = Medium)*/\n const resolvedLeft = leftLabel ?? (isDone ? '重拍' : '取消');\n const resolvedRight = rightLabel ?? (isDone ? '使用照片' : '文本');\n\n return (\n <div className={cls} style={style}>\n {/* ─── Tab 区 ─── */}\n {isDefault ? (\n <div className=\"wfm-camera-bottom__tab\" role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.key === activeTab;\n return (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={[\n 'wfm-camera-bottom__tab-item',\n isActive && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n ) : (\n /* Done 态:28h 空 spacer(BLK-4,无 token 来源) */\n <div className=\"wfm-camera-bottom__tab wfm-camera-bottom__tab--spacer\" />\n )}\n\n {/* ─── Content 区:左按钮 + Shutter(仅 Default)+ 右按钮 ─── */}\n <div className=\"wfm-camera-bottom__content\">\n <BarControlLeft className=\"wfm-camera-bottom__action wfm-camera-bottom__action--left\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedLeft}\n onClick={onLeftClick}\n className=\"wfm-camera-bottom__bar-button\"\n />\n </BarControlLeft>\n\n {isDefault && (\n <button\n type=\"button\"\n className=\"wfm-camera-bottom__shutter-slot\"\n onClick={onShutter}\n aria-label=\"拍摄\"\n >\n {shutter ?? <Shutter />}\n </button>\n )}\n\n <BarControlRight className=\"wfm-camera-bottom__action wfm-camera-bottom__action--right\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedRight}\n onClick={onRightClick}\n className={[\n 'wfm-camera-bottom__bar-button',\n isDone && 'wfm-camera-bottom__bar-button--strong',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </BarControlRight>\n </div>\n\n {/* ─── Home Indicator 占位(BLK-5,不实现视觉) ─── */}\n {homeIndicator && <div className=\"wfm-camera-bottom__home-indicator\" />}\n </div>\n );\n};\n\nCameraBottom.displayName = 'CameraBottom';\n","/**\n * CrossDevice / 跨设备 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 18629:394998 / Type=Default / 402×720\n *\n * 实现策略:消费 mobile 库 Button + general 库 IllustrationCrossDevice,\n * 仅通过 .wfm-cross-device__* 修饰类组装外壳与覆盖差量字段。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4,CSS 中保留 TODO):\n * BLK-1 Button py=9、BLK-3 Top Text width=289、BLK-4 Button width=224\n */\nimport React from 'react';\nimport { Button, type BaseProps } from '@wecom-design/mobile';\nimport { Graphic } from '@wecom-design/general';\nimport './CrossDevice.css';\n\nexport interface CrossDeviceProps extends BaseProps {\n /** 主文本(缺省「文本」) */\n text?: React.ReactNode;\n /** 自定义插画节点;缺省渲染 @wecom-design/general 的 IllustrationCrossDevice */\n illustration?: React.ReactNode;\n /** 按钮文本(缺省「文本」) */\n buttonLabel?: React.ReactNode;\n /** 按钮点击回调 */\n onButtonClick?: () => void;\n}\n\nexport const CrossDevice: React.FC<CrossDeviceProps> = ({\n text = '文本',\n illustration,\n buttonLabel = '文本',\n onButtonClick,\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device__content\">\n <div className=\"wfm-cross-device__top\">\n <div className=\"wfm-cross-device__text\">\n <p>{text}</p>\n </div>\n <div className=\"wfm-cross-device__illustration\">\n {illustration ?? (\n <Graphic.Illustration.IllustrationCrossDevice width={224} height={224} />\n )}\n </div>\n </div>\n\n <Button\n className=\"wfm-cross-device__button\"\n color=\"blue\"\n size=\"medium\"\n onClick={onButtonClick}\n >\n {buttonLabel}\n </Button>\n </div>\n </div>\n );\n};\n\nCrossDevice.displayName = 'CrossDevice';\n","/**\n * CrossDeviceInfo / 跨设备域名信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 19831:418328 / Type=Default / 402×92\n *\n * 用途:CrossDevice 主组件之外的次级提示卡,展示「在 work.weixin.qq.com/login 登录」类指引。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4):\n * BLK-2 URL 字号 17/Semibold —— 字典在本节点未命中;CSS 用同值 var + font-weight: 600 + TODO\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './CrossDeviceInfo.css';\n\nexport interface CrossDeviceInfoProps extends BaseProps {\n /** 提示文本(缺省「文本」) */\n text?: React.ReactNode;\n /** URL 文本(缺省「work.weixin.qq.com/login」) */\n url?: React.ReactNode;\n}\n\nexport const CrossDeviceInfo: React.FC<CrossDeviceInfoProps> = ({\n text = '文本',\n url = 'work.weixin.qq.com/login',\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device-info', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device-info__content\">\n <p className=\"wfm-cross-device-info__label\">{text}</p>\n <p className=\"wfm-cross-device-info__url\">{url}</p>\n </div>\n </div>\n );\n};\n\nCrossDeviceInfo.displayName = 'CrossDeviceInfo';\n","/**\n * ContactsPicker / 联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md\n * 主组件 6 Variant:Type=Default|Range × Segment=None|Organization|Tags × Status=Default|Searching\n *\n * 实现策略:消费 mobile 库 SearchBox + SegmentedControl + TableView 三个原子,\n * 仅做\"分组容器 + Section Header + 槽位组装\"。Cell 内容由消费侧通过 children 注入。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度(Type/Segment/Status 是数据驱动 Variant)。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-2 cell 内部细节(委托 mobile/TableViewCell)、BLK-3 已选数字 chip、\n * BLK-4 A-Z 索引侧栏(待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport {\n SearchBox,\n SegmentedControl,\n type BaseProps,\n type SegmentedControlOptionItem,\n} from '@wecom-design/mobile';\nimport './ContactsPicker.css';\n\nexport type ContactsPickerType = 'default' | 'range';\nexport type ContactsPickerSegment = 'none' | 'organization' | 'tags';\nexport type ContactsPickerStatus = 'default' | 'searching';\n\nexport interface ContactsPickerSection {\n /** Section header 文本(如 \"已选联系人 (1)\"、\"最近联系人\") */\n header?: React.ReactNode;\n /** Section 内容(一组 Cell,由消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children: React.ReactNode;\n}\n\nexport interface ContactsPickerProps extends BaseProps {\n /** Figma Variant:Default | Range */\n type?: ContactsPickerType;\n /** Figma Variant:仅 Range 类型有效(None | Organization | Tags) */\n segment?: ContactsPickerSegment;\n /** Figma Variant:Default | Searching */\n status?: ContactsPickerStatus;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n /** Searching 状态下\"取消\"按钮回调(只在 status=\"searching\" 时有效) */\n onSearchCancel?: () => void;\n /** 搜索文本(受控) */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n\n /** Range 类型的 Tabs 选项;缺省 [{组织架构}, {标签}] */\n segmentOptions?: SegmentedControlOptionItem[];\n /** 当前 Tab 值(受控) */\n segmentValue?: string;\n onSegmentChange?: (value: string) => void;\n\n /** Section 列表(消费侧填充) */\n sections?: ContactsPickerSection[];\n /** 直接放进列表区域的自定义节点(覆盖 sections) */\n children?: React.ReactNode;\n}\n\nconst DEFAULT_SEGMENT_OPTIONS: SegmentedControlOptionItem[] = [\n { value: 'organization', label: '组织架构' },\n { value: 'tags', label: '标签' },\n];\n\nexport const ContactsPicker: React.FC<ContactsPickerProps> = ({\n type = 'default',\n segment = 'none',\n status = 'default',\n searchBar = true,\n onSearchCancel,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n segmentOptions,\n segmentValue,\n onSegmentChange,\n sections,\n children,\n className = '',\n style,\n}) => {\n const isRange = type === 'range';\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-contacts-picker',\n `wfm-contacts-picker--${type}`,\n isRange && `wfm-contacts-picker--segment-${segment}`,\n `wfm-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const resolvedSegmentOptions = segmentOptions ?? DEFAULT_SEGMENT_OPTIONS;\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {isRange && (\n <div className=\"wfm-contacts-picker__segment\">\n <SegmentedControl\n options={resolvedSegmentOptions}\n value={segmentValue}\n onChange={onSegmentChange}\n />\n </div>\n )}\n\n <div className=\"wfm-contacts-picker__list\">\n {children}\n {sections?.map((section, idx) => (\n <section key={idx} className=\"wfm-contacts-picker__section\">\n {section.header !== undefined && (\n <div className=\"wfm-contacts-picker__section-header\">\n {section.header}\n </div>\n )}\n {section.children}\n </section>\n ))}\n </div>\n </div>\n );\n};\n\nContactsPicker.displayName = 'ContactsPicker';\n","/**\n * SecondaryContactsPicker / 次级联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.2\n * 4 Variant:Type=My Customers|Company Contacts|WeChat Contacts × Status=Default|Searching\n *\n * 用于 ContactsPicker 选中某分类后展开的二级页面(\"我的客户\"/\"企业通讯录\"/\"微信通讯录\")。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-3 已选数字 chip、BLK-4 A-Z 索引侧栏(待 IndexBar 大类)\n */\nimport React from 'react';\nimport { SearchBox, type BaseProps } from '@wecom-design/mobile';\nimport './SecondaryContactsPicker.css';\n\nexport type SecondaryContactsPickerType =\n | 'my-customers'\n | 'company-contacts'\n | 'wechat-contacts';\n\nexport type SecondaryContactsPickerStatus = 'default' | 'searching';\n\nexport interface SecondaryContactsPickerProps extends BaseProps {\n type?: SecondaryContactsPickerType;\n status?: SecondaryContactsPickerStatus;\n\n /** 顶部筛选 / 面包屑文本(如 \"根据标签筛选 ∨\"、\"企业通讯录 / 产品部\"),缺省不显示 */\n filter?: React.ReactNode;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n onSearchCancel?: () => void;\n\n /** 列表内容(消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children?: React.ReactNode;\n}\n\nexport const SecondaryContactsPicker: React.FC<SecondaryContactsPickerProps> = ({\n type = 'my-customers',\n status = 'default',\n filter,\n searchBar = true,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n onSearchCancel,\n children,\n className = '',\n style,\n}) => {\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-secondary-contacts-picker',\n `wfm-secondary-contacts-picker--${type}`,\n `wfm-secondary-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-secondary-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-secondary-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {filter !== undefined && (\n <div className=\"wfm-secondary-contacts-picker__filter\">{filter}</div>\n )}\n\n <div className=\"wfm-secondary-contacts-picker__list\">{children}</div>\n </div>\n );\n};\n\nSecondaryContactsPicker.displayName = 'SecondaryContactsPicker';\n","/**\n * ContactsTableView / 联系人列表视图(部件)[Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.3 / §1.6\n * 6 Variant:Type=Recent Contacts|Organization|Tags × Status=Default|Searching\n *\n * 用作 ContactsPicker / SecondaryContactsPicker 的子部件,渲染单一类型的联系人/组织/标签列表。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-4 A-Z 索引侧栏(本组件保留 indexBar 槽,待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './ContactsTableView.css';\n\nexport type ContactsTableViewType = 'recent-contacts' | 'organization' | 'tags';\nexport type ContactsTableViewStatus = 'default' | 'searching';\n\nexport interface ContactsTableViewProps extends BaseProps {\n type?: ContactsTableViewType;\n status?: ContactsTableViewStatus;\n\n /** 列表内容(消费侧填充 mobile 库 TableViewCell) */\n children?: React.ReactNode;\n\n /** A-Z 索引侧栏节点(BLK-4,待 IndexBar 大类完成后由消费侧注入) */\n indexBar?: React.ReactNode;\n}\n\nexport const ContactsTableView: React.FC<ContactsTableViewProps> = ({\n type = 'recent-contacts',\n status = 'default',\n children,\n indexBar,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-contacts-table-view',\n `wfm-contacts-table-view--${type}`,\n `wfm-contacts-table-view--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-contacts-table-view__list\">{children}</div>\n {indexBar !== undefined && (\n <div className=\"wfm-contacts-table-view__index-bar\">{indexBar}</div>\n )}\n </div>\n );\n};\n\nContactsTableView.displayName = 'ContactsTableView';\n","/**\n * EmoticonSheet / 表情面板 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.1 / §1.1\n * 1 Variant:Type=Default(402×386)\n *\n * 实现策略:本组件提供\"Tab Bar + 内容 + Bottom Bar\"三段式外壳容器。\n * 内容(Section header + EmoticonGrid + EmoticonItem)由消费侧通过 children 组合。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-2(Home Indicator h=34,token 包未导出 safe_area_ios var)、\n * BLK-4(Tab Bar 高度估算)、BLK-5(Bottom Bar 高度自然撑开)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonSheet.css';\n\nexport interface EmoticonSheetTab {\n key: string;\n /** Tab icon 节点(消费侧注入) */\n icon: React.ReactNode;\n active?: boolean;\n}\n\nexport interface EmoticonSheetProps extends BaseProps {\n /** Tab Bar 选项 */\n tabs?: EmoticonSheetTab[];\n onTabChange?: (key: string) => void;\n\n /** 主内容(一组 Section header + EmoticonGrid,由消费侧组装) */\n children?: React.ReactNode;\n\n /** 删除按钮点击回调(缺省渲染) */\n onDelete?: () => void;\n /** 自定义删除按钮节点(缺省渲染默认外形) */\n deleteSlot?: React.ReactNode;\n\n /** 发送按钮文本(缺省「发送」) */\n sendLabel?: React.ReactNode;\n onSend?: () => void;\n /** 发送按钮是否禁用 */\n sendDisabled?: boolean;\n\n /** 是否预留底部安全区(Home Indicator 占位) */\n homeIndicator?: boolean;\n}\n\nexport const EmoticonSheet: React.FC<EmoticonSheetProps> = ({\n tabs,\n onTabChange,\n children,\n onDelete,\n deleteSlot,\n sendLabel = '发送',\n onSend,\n sendDisabled = false,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const cls = ['wfm-emoticon-sheet', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n {tabs && tabs.length > 0 && (\n <div className=\"wfm-emoticon-sheet__tab-bar\" role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.active}\n className={[\n 'wfm-emoticon-sheet__tab',\n tab.active && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.icon}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"wfm-emoticon-sheet__content\">{children}</div>\n\n <div className=\"wfm-emoticon-sheet__bottom-bar\">\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__delete\"\n onClick={onDelete}\n aria-label=\"删除\"\n >\n {deleteSlot}\n </button>\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__send\"\n onClick={onSend}\n disabled={sendDisabled}\n >\n {sendLabel}\n </button>\n </div>\n\n {homeIndicator && <div className=\"wfm-emoticon-sheet__home-indicator\" />}\n </div>\n );\n};\n\nEmoticonSheet.displayName = 'EmoticonSheet';\n","/**\n * EmoticonGrid / 表情网格 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.2 / §1.2-§1.4\n * 3 Variant:Type=WeChat Face(7 列)| Favorites(4 列)| Big Face(4 列)\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-3(行/列 gap 字典无独立 token,估算 space_small_xl=8)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonGrid.css';\n\nexport type EmoticonGridType = 'wechat-face' | 'favorites' | 'big-face';\n\nexport interface EmoticonGridProps extends BaseProps {\n type?: EmoticonGridType;\n /** Cell 内容(消费侧用 EmoticonItem 渲染) */\n children?: React.ReactNode;\n}\n\nexport const EmoticonGrid: React.FC<EmoticonGridProps> = ({\n type = 'wechat-face',\n children,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-grid',\n `wfm-emoticon-grid--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n};\n\nEmoticonGrid.displayName = 'EmoticonGrid';\n","/**\n * EmoticonItem / 表情项 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.3 / §1.5-§1.7\n * 6 Variant:Type=WeChat Face | Favorites | WeChat Big Face × State=Normal | Pressed\n *\n * 状态:含 §9.1 State Variant(Normal | Pressed),无 Selection/Focus 维度。\n *\n * BLOCKED:BLK-1(Pressed 视觉变淡程度,字典空,opacity:0.5 user override)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonItem.css';\n\nexport type EmoticonItemType = 'wechat-face' | 'favorites' | 'big-face';\nexport type EmoticonItemState = 'normal' | 'pressed';\n\nexport interface EmoticonItemProps extends BaseProps {\n type?: EmoticonItemType;\n /** 显式 pressed 状态(受控);缺省由 :active 伪类驱动 */\n state?: EmoticonItemState;\n /** 主体内容:emoji glyph、收藏图片、Big Face 圆形 emoji 等 */\n children?: React.ReactNode;\n /** Big Face 下方文本标签(仅 type=big-face 渲染) */\n label?: React.ReactNode;\n /** Favorites 底部水印文本(仅 type=favorites 渲染) */\n watermark?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const EmoticonItem: React.FC<EmoticonItemProps> = ({\n type = 'wechat-face',\n state = 'normal',\n children,\n label,\n watermark,\n onClick,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-item',\n `wfm-emoticon-item--${type}`,\n state === 'pressed' && 'is-pressed',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type=\"button\" className={cls} style={style} onClick={onClick}>\n <span className=\"wfm-emoticon-item__body\">{children}</span>\n {type === 'favorites' && watermark !== undefined && (\n <span className=\"wfm-emoticon-item__watermark\">{watermark}</span>\n )}\n {type === 'big-face' && label !== undefined && (\n <span className=\"wfm-emoticon-item__label\">{label}</span>\n )}\n </button>\n );\n};\n\nEmoticonItem.displayName = 'EmoticonItem';\n"],"names":["AppInfoHeader","avatar","title","jsxs","jsx","AppInfo","type","header","description","sections","className","style","cls","TableView","TableViewCell","rows","idx","React","SectionFooter","row","rIdx","Fragment","Shutter","forwardRef","ref","DEFAULT_TABS","CameraBottom","tabs","activeTab","onTabChange","shutter","onShutter","leftLabel","onLeftClick","rightLabel","onRightClick","homeIndicator","isDefault","isDone","resolvedLeft","resolvedRight","tab","isActive","BarControlLeft","BarButton","BarControlRight","CrossDevice","text","illustration","buttonLabel","onButtonClick","Graphic","Button","CrossDeviceInfo","url","DEFAULT_SEGMENT_OPTIONS","ContactsPicker","segment","status","searchBar","onSearchCancel","searchValue","onSearchChange","searchPlaceholder","segmentOptions","segmentValue","onSegmentChange","children","isRange","isSearching","resolvedSegmentOptions","SearchBox","SegmentedControl","section","SecondaryContactsPicker","filter","ContactsTableView","indexBar","EmoticonSheet","onDelete","deleteSlot","sendLabel","onSend","sendDisabled","EmoticonGrid","EmoticonItem","state","label","watermark","onClick"],"mappings":"6MAyEMA,EAA6C,CAAC,CAAE,OAAAC,EAAQ,MAAAC,KAC5DC,OAAC,MAAA,CAAI,UAAU,uBACZ,SAAA,CAAAF,IAAW,QACVG,EAAAA,IAAC,MAAA,CAAI,UAAU,8BAA+B,SAAAH,EAAO,EAEvDG,EAAAA,IAAC,MAAA,CAAI,UAAU,6BAA8B,SAAAF,EAAM,EACnDE,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAA,CAAiC,CAAA,EAClD,EAGWC,EAAkC,CAAC,CAC9C,KAAAC,EAAO,MACP,OAAAC,EACA,YAAAC,EACA,SAAAC,EACA,UAAAC,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CACV,eACA,iBAAiBN,CAAI,GACrBI,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEP,EAAAA,KAAC,MAAA,CAAI,UAAWS,EAAK,MAAAD,EACnB,SAAA,CAAAP,EAAAA,IAACJ,EAAA,CAAe,GAAGO,EAAQ,EAG3BH,EAAAA,IAACS,EAAAA,UAAA,CAAU,WAAW,QAAQ,UAAW,GACvC,SAAAT,EAAAA,IAACU,EAAAA,cAAA,CACC,UAAU,yBACV,KACEV,EAAAA,IAAC,OAAA,CAAK,UAAU,2BACb,SAAAI,EAAY,OAAS,OACxB,EAEF,MACEJ,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA2B,WAAY,IAAA,CAAK,CAAA,CAAA,EAGlE,EAGCK,EAAS,IAAI,CAACM,EAAMC,IACnBb,EAAAA,KAACc,EAAM,SAAN,CACC,SAAA,CAAAb,EAAAA,IAACc,EAAAA,cAAA,CAAc,KAAK,OAAA,CAAQ,EAC5Bd,EAAAA,IAACS,EAAAA,UAAA,CAAU,WAAW,QAAQ,UAAS,GACpC,SAAAE,EAAK,IAAI,CAACI,EAAKC,IACdhB,EAAAA,IAACU,EAAAA,cAAA,CAEC,UAAU,oBACV,MAAOK,EAAI,MACX,gBAAiBA,EAAI,gBACrB,UACEA,EAAI,eAAiB,QACrBA,EAAI,kBAAoB,QACxBA,EAAI,UAAY,OACdhB,EAAAA,KAAAkB,EAAAA,SAAA,CACG,SAAA,CAAAF,EAAI,kBAAoB,QACvBf,EAAAA,IAAC,QAAK,UAAU,4BACb,WAAI,eAAA,CACP,EAEDe,EAAI,eAAiB,QACpBf,EAAAA,IAAC,QAAK,UAAU,yBACb,WAAI,YAAA,CACP,EAEDe,EAAI,UAAY,QACff,EAAAA,IAAC,QAAK,UAAU,4BACb,WAAI,OAAA,CACP,CAAA,CAAA,CAEJ,EACE,OAEN,cAAee,EAAI,UAAY,OAAY,UAAY,OACvD,QAASA,EAAI,OAAA,EA5BRC,CAAA,CA8BR,CAAA,CACH,CAAA,CAAA,EApCmBJ,CAqCrB,CACD,CAAA,EACH,CAEJ,EAEAX,EAAQ,YAAc,UCnJf,MAAMiB,EAAUC,EAAAA,WACrB,CAAC,CAAE,UAAAb,EAAY,GAAI,MAAAC,CAAA,EAASa,IAAQ,CAClC,MAAMZ,EAAM,CAAC,cAAeF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC/D,OAAON,MAAC,OAAI,IAAAoB,EAAU,UAAWZ,EAAK,MAAAD,EAAc,KAAK,MAAM,aAAW,IAAA,CAAK,CACjF,CACF,EAEAW,EAAQ,YAAc,UC2CtB,MAAMG,EAAgC,CACpC,CAAE,IAAK,QAAS,MAAO,IAAA,EACvB,CAAE,IAAK,QAAS,MAAO,IAAA,EACvB,CAAE,IAAK,WAAY,MAAO,IAAA,CAC5B,EAEaC,EAA4C,CAAC,CACxD,KAAApB,EAAO,UACP,KAAAqB,EAAOF,EACP,UAAAG,EAAY,QACZ,YAAAC,EACA,QAAAC,EACA,UAAAC,EACA,UAAAC,EACA,YAAAC,EACA,WAAAC,EACA,aAAAC,EACA,cAAAC,EAAgB,GAChB,UAAA1B,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAM0B,EAAY/B,IAAS,UACrBgC,EAAShC,IAAS,OAElBM,EAAM,CACV,oBACA,sBAAsBN,CAAI,GAC1BI,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAGL6B,EAAeP,IAAcM,EAAS,KAAO,MAC7CE,EAAgBN,IAAeI,EAAS,OAAS,MAEvD,OACEnC,EAAAA,KAAC,MAAA,CAAI,UAAWS,EAAK,MAAAD,EAElB,SAAA,CAAA0B,EACCjC,EAAAA,IAAC,OAAI,UAAU,yBAAyB,KAAK,UAC1C,SAAAuB,EAAK,IAAKc,GAAQ,CACjB,MAAMC,EAAWD,EAAI,MAAQb,EAC7B,OACExB,EAAAA,IAAC,SAAA,CAEC,KAAK,SACL,KAAK,MACL,gBAAesC,EACf,UAAW,CACT,8BACAA,GAAY,WAAA,EAEX,OAAO,OAAO,EACd,KAAK,GAAG,EACX,QAAS,IAAMb,IAAcY,EAAI,GAAG,EAEnC,SAAAA,EAAI,KAAA,EAZAA,EAAI,GAAA,CAef,CAAC,CAAA,CACH,EAGArC,EAAAA,IAAC,MAAA,CAAI,UAAU,uDAAA,CAAwD,EAIzED,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAC,EAAAA,IAACuC,EAAAA,eAAA,CAAe,UAAU,4DACxB,SAAAvC,EAAAA,IAACwC,EAAAA,UAAA,CACC,KAAK,OACL,SAAS,UACT,MAAOL,EACP,QAASN,EACT,UAAU,+BAAA,CAAA,EAEd,EAECI,GACCjC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,kCACV,QAAS2B,EACT,aAAW,KAEV,SAAAD,SAAYR,EAAA,CAAA,CAAQ,CAAA,CAAA,EAIzBlB,EAAAA,IAACyC,EAAAA,gBAAA,CAAgB,UAAU,6DACzB,SAAAzC,EAAAA,IAACwC,EAAAA,UAAA,CACC,KAAK,OACL,SAAS,UACT,MAAOJ,EACP,QAASL,EACT,UAAW,CACT,gCACAG,GAAU,uCAAA,EAET,OAAO,OAAO,EACd,KAAK,GAAG,CAAA,CAAA,CACb,CACF,CAAA,EACF,EAGCF,GAAiBhC,EAAAA,IAAC,MAAA,CAAI,UAAU,mCAAA,CAAoC,CAAA,EACvE,CAEJ,EAEAsB,EAAa,YAAc,eCnJpB,MAAMoB,EAA0C,CAAC,CACtD,KAAAC,EAAO,KACP,aAAAC,EACA,YAAAC,EAAc,KACd,cAAAC,EACA,UAAAxC,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CAAC,mBAAoBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEpE,OACEN,EAAAA,IAAC,OAAI,UAAWQ,EAAK,MAAAD,EACnB,SAAAR,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wBACb,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,yBACb,SAAAA,MAAC,IAAA,CAAG,WAAK,CAAA,CACX,EACAA,EAAAA,IAAC,MAAA,CAAI,UAAU,iCACZ,YACCA,EAAAA,IAAC+C,EAAAA,QAAQ,aAAa,wBAArB,CAA6C,MAAO,IAAK,OAAQ,IAAK,CAAA,CAE3E,CAAA,EACF,EAEA/C,EAAAA,IAACgD,EAAAA,OAAA,CACC,UAAU,2BACV,MAAM,OACN,KAAK,SACL,QAASF,EAER,SAAAD,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAEJ,EAEAH,EAAY,YAAc,cC3CnB,MAAMO,EAAkD,CAAC,CAC9D,KAAAN,EAAO,KACP,IAAAO,EAAM,2BACN,UAAA5C,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CAAC,wBAAyBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEzE,OACEN,EAAAA,IAAC,OAAI,UAAWQ,EAAK,MAAAD,EACnB,SAAAR,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAAgC,SAAA2C,EAAK,EAClD3C,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA8B,SAAAkD,CAAA,CAAI,CAAA,CAAA,CACjD,CAAA,CACF,CAEJ,EAEAD,EAAgB,YAAc,kBCsB9B,MAAME,EAAwD,CAC5D,CAAE,MAAO,eAAgB,MAAO,MAAA,EAChC,CAAE,MAAO,OAAQ,MAAO,IAAA,CAC1B,EAEaC,EAAgD,CAAC,CAC5D,KAAAlD,EAAO,UACP,QAAAmD,EAAU,OACV,OAAAC,EAAS,UACT,UAAAC,EAAY,GACZ,eAAAC,EACA,YAAAC,EACA,eAAAC,EACA,kBAAAC,EAAoB,KACpB,eAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,SAAAzD,EACA,SAAA0D,EACA,UAAAzD,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMyD,EAAU9D,IAAS,QACnB+D,EAAcX,IAAW,YAEzB9C,EAAM,CACV,sBACA,wBAAwBN,CAAI,GAC5B8D,GAAW,gCAAgCX,CAAO,GAClD,wBAAwBC,CAAM,GAC9BhD,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEL4D,EAAyBN,GAAkBT,EAEjD,OACEpD,EAAAA,KAAC,MAAA,CAAI,UAAWS,EAAK,MAAAD,EAClB,SAAA,CAAAgD,GACCxD,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAC,EAAAA,IAACmE,EAAAA,UAAA,CACC,MAAM,QACN,YAAaR,EACb,MAAOF,EACP,SAAUC,CAAA,CAAA,EAEXO,GACCjE,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,qCACV,QAASwD,EACV,SAAA,IAAA,CAAA,CAED,EAEJ,EAGDQ,GACChE,EAAAA,IAAC,MAAA,CAAI,UAAU,+BACb,SAAAA,EAAAA,IAACoE,EAAAA,iBAAA,CACC,QAASF,EACT,MAAOL,EACP,SAAUC,CAAA,CAAA,EAEd,EAGF/D,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACZ,SAAA,CAAAgE,EACA1D,GAAU,IAAI,CAACgE,EAASzD,IACvBb,OAAC,UAAA,CAAkB,UAAU,+BAC1B,SAAA,CAAAsE,EAAQ,SAAW,QAClBrE,EAAAA,IAAC,OAAI,UAAU,sCACZ,WAAQ,MAAA,CACX,EAEDqE,EAAQ,QAAA,CAAA,EANGzD,CAOd,CACD,CAAA,CAAA,CACH,CAAA,EACF,CAEJ,EAEAwC,EAAe,YAAc,iBC5GtB,MAAMkB,EAAkE,CAAC,CAC9E,KAAApE,EAAO,eACP,OAAAoD,EAAS,UACT,OAAAiB,EACA,UAAAhB,EAAY,GACZ,YAAAE,EACA,eAAAC,EACA,kBAAAC,EAAoB,KACpB,eAAAH,EACA,SAAAO,EACA,UAAAzD,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAM0D,EAAcX,IAAW,YAEzB9C,EAAM,CACV,gCACA,kCAAkCN,CAAI,GACtC,kCAAkCoD,CAAM,GACxChD,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEP,EAAAA,KAAC,MAAA,CAAI,UAAWS,EAAK,MAAAD,EAClB,SAAA,CAAAgD,GACCxD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAACmE,EAAAA,UAAA,CACC,MAAM,QACN,YAAaR,EACb,MAAOF,EACP,SAAUC,CAAA,CAAA,EAEXO,GACCjE,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,+CACV,QAASwD,EACV,SAAA,IAAA,CAAA,CAED,EAEJ,EAGDe,IAAW,QACVvE,EAAAA,IAAC,MAAA,CAAI,UAAU,wCAAyC,SAAAuE,EAAO,EAGjEvE,EAAAA,IAAC,MAAA,CAAI,UAAU,sCAAuC,SAAA+D,CAAA,CAAS,CAAA,EACjE,CAEJ,EAEAO,EAAwB,YAAc,0BClE/B,MAAME,EAAsD,CAAC,CAClE,KAAAtE,EAAO,kBACP,OAAAoD,EAAS,UACT,SAAAS,EACA,SAAAU,EACA,UAAAnE,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CACV,0BACA,4BAA4BN,CAAI,GAChC,4BAA4BoD,CAAM,GAClChD,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEP,EAAAA,KAAC,MAAA,CAAI,UAAWS,EAAK,MAAAD,EACnB,SAAA,CAAAP,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAiC,SAAA+D,CAAA,CAAS,EACxDU,IAAa,QACZzE,EAAAA,IAAC,MAAA,CAAI,UAAU,qCAAsC,SAAAyE,CAAA,CAAS,CAAA,EAElE,CAEJ,EAEAD,EAAkB,YAAc,oBCVzB,MAAME,EAA8C,CAAC,CAC1D,KAAAnD,EACA,YAAAE,EACA,SAAAsC,EACA,SAAAY,EACA,WAAAC,EACA,UAAAC,EAAY,KACZ,OAAAC,EACA,aAAAC,EAAe,GACf,cAAA/C,EAAgB,GAChB,UAAA1B,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CAAC,qBAAsBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtE,OACEP,EAAAA,KAAC,MAAA,CAAI,UAAWS,EAAK,MAAAD,EAClB,SAAA,CAAAgB,GAAQA,EAAK,OAAS,GACrBvB,EAAAA,IAAC,MAAA,CAAI,UAAU,8BAA8B,KAAK,UAC/C,SAAAuB,EAAK,IAAKc,GACTrC,EAAAA,IAAC,SAAA,CAEC,KAAK,SACL,KAAK,MACL,gBAAeqC,EAAI,OACnB,UAAW,CACT,0BACAA,EAAI,QAAU,WAAA,EAEb,OAAO,OAAO,EACd,KAAK,GAAG,EACX,QAAS,IAAMZ,IAAcY,EAAI,GAAG,EAEnC,SAAAA,EAAI,IAAA,EAZAA,EAAI,GAAA,CAcZ,EACH,EAGFrC,EAAAA,IAAC,MAAA,CAAI,UAAU,8BAA+B,SAAA+D,CAAA,CAAS,EAEvDhE,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,6BACV,QAAS2E,EACT,aAAW,KAEV,SAAAC,CAAA,CAAA,EAEH5E,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAU,2BACV,QAAS8E,EACT,SAAUC,EAET,SAAAF,CAAA,CAAA,CACH,EACF,EAEC7C,GAAiBhC,EAAAA,IAAC,MAAA,CAAI,UAAU,oCAAA,CAAqC,CAAA,EACxE,CAEJ,EAEA0E,EAAc,YAAc,gBC3FrB,MAAMM,EAA4C,CAAC,CACxD,KAAA9E,EAAO,cACP,SAAA6D,EACA,UAAAzD,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CACV,oBACA,sBAAsBN,CAAI,GAC1BI,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEN,EAAAA,IAAC,MAAA,CAAI,UAAWQ,EAAK,MAAAD,EAClB,SAAAwD,EACH,CAEJ,EAEAiB,EAAa,YAAc,eCbpB,MAAMC,EAA4C,CAAC,CACxD,KAAA/E,EAAO,cACP,MAAAgF,EAAQ,SACR,SAAAnB,EACA,MAAAoB,EACA,UAAAC,EACA,QAAAC,EACA,UAAA/E,EAAY,GACZ,MAAAC,CACF,IAAM,CACJ,MAAMC,EAAM,CACV,oBACA,sBAAsBN,CAAI,GAC1BgF,IAAU,WAAa,aACvB5E,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,cACG,SAAA,CAAO,KAAK,SAAS,UAAWE,EAAK,MAAAD,EAAc,QAAA8E,EAClD,SAAA,CAAArF,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA2B,SAAA+D,CAAA,CAAS,EACnD7D,IAAS,aAAekF,IAAc,cACpC,OAAA,CAAK,UAAU,+BAAgC,SAAAA,CAAA,CAAU,EAE3DlF,IAAS,YAAciF,IAAU,cAC/B,OAAA,CAAK,UAAU,2BAA4B,SAAAA,CAAA,CAAM,CAAA,EAEtD,CAEJ,EAEAF,EAAa,YAAc"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/components/AppInfo/AppInfo.tsx","../src/components/Camera/Shutter.tsx","../src/components/Camera/CameraBottom.tsx","../src/components/CrossDevice/CrossDevice.tsx","../src/components/CrossDevice/CrossDeviceInfo.tsx","../src/components/ContactsPicker/ContactsPicker.tsx","../src/components/ContactsPicker/SecondaryContactsPicker.tsx","../src/components/ContactsPicker/ContactsTableView.tsx","../src/components/EmoticonSheet/EmoticonSheet.tsx","../src/components/EmoticonSheet/EmoticonGrid.tsx","../src/components/EmoticonSheet/EmoticonItem.tsx"],"sourcesContent":["/**\n * AppInfo / 应用信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证审计:prompts/_audit/foundation-mobile/AppInfo.md\n *\n * 实现策略:消费 mobile 库的 TableView / TableViewCell / SectionFooter\n * 三个原子,仅通过 .wfm-app-info__* 修饰类覆盖与 Figma 真值的差量字段。\n *\n * 变体矩阵(取证已通过):\n * Type: App | Smart App\n *\n * - App / Section 1(描述行 78h):Cell-Left \"应用描述\" + 多行说明\n * - App / Section 2(数据行 56h):标题 + 数值 + chevron\n * - Smart App / Section 1:同 App\n * - Smart App / Section 2(AI 点数行 56h):标题 + ⓘ + Smart Point + 99 点 + chevron\n * - Smart App / Section 3(链接行 56h):标题 + chevron\n */\nimport React from 'react';\nimport {\n TableView,\n TableViewCell,\n SectionFooter,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport './AppInfo.css';\n\nexport type AppInfoType = 'app' | 'smart-app';\n\n/** Header 区:Avatar + 应用名 */\nexport interface AppInfoHeaderData {\n /** Avatar 节点(建议 64×64,由消费侧提供) */\n avatar?: React.ReactNode;\n /** 应用名 */\n title: React.ReactNode;\n}\n\n/** 描述行:Cell-Left \"应用描述\" + 多行说明 */\nexport interface AppInfoDescription {\n /** 左侧标签文案,默认 \"应用描述\" */\n label?: React.ReactNode;\n /** 右侧多行说明文案 */\n text: React.ReactNode;\n}\n\n/** 普通数据/链接行 */\nexport interface AppInfoRow {\n /** 标题 */\n title: React.ReactNode;\n /** 标题右侧的额外 icon(例如 ⓘ) */\n titleExtraRight?: React.ReactNode;\n /** Accessory 区右对齐文本(如 \"99 点\",可选) */\n trailingText?: React.ReactNode;\n /** Accessory 区文本前的额外节点(如 Smart Point 12×12) */\n trailingLeading?: React.ReactNode;\n /** chevron 节点(由消费侧通过 children 注入;缺省不渲染右箭头) */\n chevron?: React.ReactNode;\n /** 点击回调 */\n onClick?: () => void;\n}\n\nexport interface AppInfoProps extends BaseProps {\n /** 类型变体 */\n type?: AppInfoType;\n /** Header 信息 */\n header: AppInfoHeaderData;\n /** Section 1 描述行 */\n description: AppInfoDescription;\n /** 后续 Section 行(每个数组元素 = 一个 Section,由 SectionFooter Blank 8h 间隔) */\n sections: AppInfoRow[][];\n}\n\n/** Header 子组件 */\nconst AppInfoHeader: React.FC<AppInfoHeaderData> = ({ avatar, title }) => (\n <div className=\"wfm-app-info__header\">\n {avatar !== undefined && (\n <div className=\"wfm-app-info__header-avatar\">{avatar}</div>\n )}\n <div className=\"wfm-app-info__header-title\">{title}</div>\n <div className=\"wfm-app-info__header-separator\" />\n </div>\n);\n\nexport const AppInfo: React.FC<AppInfoProps> = ({\n type = 'app',\n header,\n description,\n sections,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-app-info',\n `wfm-app-info--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <AppInfoHeader {...header} />\n\n {/* Section 1 — 描述行(78h,Cell-Left \"应用描述\" + 多行说明) */}\n <TableView tableStyle=\"plain\" separator={false}>\n <TableViewCell\n className=\"wfm-app-info__desc-row\"\n left={\n <span className=\"wfm-app-info__desc-label\">\n {description.label ?? '应用描述'}\n </span>\n }\n title={\n <span className=\"wfm-app-info__desc-text\">{description.text}</span>\n }\n />\n </TableView>\n\n {/* 后续 Section(每个 Section 之间 SectionFooter Blank 8h) */}\n {sections.map((rows, idx) => (\n <React.Fragment key={idx}>\n <SectionFooter type=\"blank\" />\n <TableView tableStyle=\"plain\" separator>\n {rows.map((row, rIdx) => (\n <TableViewCell\n key={rIdx}\n className=\"wfm-app-info__row\"\n title={row.title}\n titleExtraRight={row.titleExtraRight}\n accessory={\n row.trailingText !== undefined ||\n row.trailingLeading !== undefined ||\n row.chevron !== undefined ? (\n <>\n {row.trailingLeading !== undefined && (\n <span className=\"wfm-app-info__row-leading\">\n {row.trailingLeading}\n </span>\n )}\n {row.trailingText !== undefined && (\n <span className=\"wfm-app-info__row-text\">\n {row.trailingText}\n </span>\n )}\n {row.chevron !== undefined && (\n <span className=\"wfm-app-info__row-chevron\">\n {row.chevron}\n </span>\n )}\n </>\n ) : undefined\n }\n accessoryType={row.chevron !== undefined ? 'chevron' : undefined}\n onClick={row.onClick}\n />\n ))}\n </TableView>\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nAppInfo.displayName = 'AppInfo';\n","/**\n * Shutter / 快门 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md §1.3 / §6\n * 节点 22725:442897 / Type=Default / 68×68\n *\n * Shutter 不是图标资产(user override 2026-06-24),是组件自带几何:\n * 68×68 白描边空心圆,描边宽度 4px 由 screenshot 视觉确定。\n */\nimport React, { forwardRef } from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './Shutter.css';\n\nexport interface ShutterProps extends BaseProps {}\n\nexport const Shutter = forwardRef<HTMLDivElement, ShutterProps>(\n ({ className = '', style }, ref) => {\n const cls = ['wfm-shutter', className].filter(Boolean).join(' ');\n return <div ref={ref} className={cls} style={style} role=\"img\" aria-label=\"快门\" />;\n }\n);\n\nShutter.displayName = 'Shutter';\n","/**\n * CameraBottom / 相机底部 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md\n * - Type=Default 节点 22726:450517(402×158,含 Shutter + Tab)\n * - Type=Done 节点 22848:444585(402×158,无 Shutter,Tab 留 28h spacer)\n *\n * 实现策略:消费 mobile 库 BarControlLeft / BarControlRight / BarButton 三个原子,\n * 仅通过 .wfm-camera-bottom__* 修饰类覆盖 Camera 深色背景下与 Figma 真值的差量字段\n * (文字白色 + 内部高度 + flex:1)。Tab 区与外层布局 wfm 自实现。\n *\n * BLOCKED 字段(Camera.md §4,CSS 中保留 TODO):\n * BLK-1 Content py=14、BLK-2 pl/pr=18、BLK-3 内部高度 44/68、\n * BLK-4 Done Tab spacer=28、BLK-5 Home Indicator(不实现,仅留 props 槽)。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。Tab 项「选中色」是数据驱动的颜色变化。\n */\nimport React from 'react';\nimport {\n BarControlLeft,\n BarControlRight,\n BarButton,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport { Shutter } from './Shutter';\nimport './CameraBottom.css';\n\nexport type CameraBottomType = 'default' | 'done';\n\nexport type CameraTabKey = 'video' | 'photo' | 'document';\n\nexport interface CameraTabItem {\n key: CameraTabKey;\n label: React.ReactNode;\n}\n\nexport interface CameraBottomProps extends BaseProps {\n /** Type=Default | Done(Figma Variant) */\n type?: CameraBottomType;\n\n /* ═══ Default 专属:Tab + Shutter ═══ */\n /** Tab 列表(仅 Default)。缺省 [视频, 照片, 文档] */\n tabs?: CameraTabItem[];\n /** 当前选中 Tab key(仅 Default)。缺省 'photo' */\n activeTab?: CameraTabKey;\n /** Tab 切换回调 */\n onTabChange?: (key: CameraTabKey) => void;\n /** Shutter 自定义节点(缺省渲染默认 Shutter 几何) */\n shutter?: React.ReactNode;\n /** Shutter 点击回调(仅 Default) */\n onShutter?: () => void;\n\n /* ═══ 左右按钮(Default | Done 共有,文案不同) ═══ */\n /** 左侧按钮文本(Default 缺省「取消」,Done 缺省「重拍」) */\n leftLabel?: React.ReactNode;\n onLeftClick?: () => void;\n /** 右侧按钮文本(Default 缺省「文本」,Done 缺省「使用照片」) */\n rightLabel?: React.ReactNode;\n onRightClick?: () => void;\n\n /* ═══ Home Indicator(Camera.md BLK-5:不在本组件实现) ═══ */\n /** 是否预留底部安全区。本组件仅留视觉占位,不渲染 Home Indicator 视觉(待 HomeIndicator 大类落地) */\n homeIndicator?: boolean;\n}\n\nconst DEFAULT_TABS: CameraTabItem[] = [\n { key: 'video', label: '视频' },\n { key: 'photo', label: '照片' },\n { key: 'document', label: '文档' },\n];\n\nexport const CameraBottom: React.FC<CameraBottomProps> = ({\n type = 'default',\n tabs = DEFAULT_TABS,\n activeTab = 'photo',\n onTabChange,\n shutter,\n onShutter,\n leftLabel,\n onLeftClick,\n rightLabel,\n onRightClick,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const isDefault = type === 'default';\n const isDone = type === 'done';\n\n const cls = [\n 'wfm-camera-bottom',\n `wfm-camera-bottom--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n /* 左右按钮文本:Default = 取消 / 文本(Regular),Done = 重拍 / 使用照片(右侧 body_strong = Medium)*/\n const resolvedLeft = leftLabel ?? (isDone ? '重拍' : '取消');\n const resolvedRight = rightLabel ?? (isDone ? '使用照片' : '文本');\n\n return (\n <div className={cls} style={style}>\n {/* ─── Tab 区 ─── */}\n {isDefault ? (\n <div className=\"wfm-camera-bottom__tab\" role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.key === activeTab;\n return (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={[\n 'wfm-camera-bottom__tab-item',\n isActive && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n ) : (\n /* Done 态:28h 空 spacer(BLK-4,无 token 来源) */\n <div className=\"wfm-camera-bottom__tab wfm-camera-bottom__tab--spacer\" />\n )}\n\n {/* ─── Content 区:左按钮 + Shutter(仅 Default)+ 右按钮 ─── */}\n <div className=\"wfm-camera-bottom__content\">\n <BarControlLeft className=\"wfm-camera-bottom__action wfm-camera-bottom__action--left\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedLeft}\n onClick={onLeftClick}\n className=\"wfm-camera-bottom__bar-button\"\n />\n </BarControlLeft>\n\n {isDefault && (\n <button\n type=\"button\"\n className=\"wfm-camera-bottom__shutter-slot\"\n onClick={onShutter}\n aria-label=\"拍摄\"\n >\n {shutter ?? <Shutter />}\n </button>\n )}\n\n <BarControlRight className=\"wfm-camera-bottom__action wfm-camera-bottom__action--right\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedRight}\n onClick={onRightClick}\n className={[\n 'wfm-camera-bottom__bar-button',\n isDone && 'wfm-camera-bottom__bar-button--strong',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </BarControlRight>\n </div>\n\n {/* ─── Home Indicator 占位(BLK-5,不实现视觉) ─── */}\n {homeIndicator && <div className=\"wfm-camera-bottom__home-indicator\" />}\n </div>\n );\n};\n\nCameraBottom.displayName = 'CameraBottom';\n","/**\n * CrossDevice / 跨设备 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 18629:394998 / Type=Default / 402×720\n *\n * 实现策略:消费 mobile 库 Button + general 库 IllustrationCrossDevice,\n * 仅通过 .wfm-cross-device__* 修饰类组装外壳与覆盖差量字段。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4,CSS 中保留 TODO):\n * BLK-1 Button py=9、BLK-3 Top Text width=289、BLK-4 Button width=224\n */\nimport React from 'react';\nimport { Button, type BaseProps } from '@wecom-design/mobile';\nimport { Graphic } from '@wecom-design/general';\nimport './CrossDevice.css';\n\nexport interface CrossDeviceProps extends BaseProps {\n /** 主文本(缺省「文本」) */\n text?: React.ReactNode;\n /** 自定义插画节点;缺省渲染 @wecom-design/general 的 IllustrationCrossDevice */\n illustration?: React.ReactNode;\n /** 按钮文本(缺省「文本」) */\n buttonLabel?: React.ReactNode;\n /** 按钮点击回调 */\n onButtonClick?: () => void;\n}\n\nexport const CrossDevice: React.FC<CrossDeviceProps> = ({\n text = '文本',\n illustration,\n buttonLabel = '文本',\n onButtonClick,\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device__content\">\n <div className=\"wfm-cross-device__top\">\n <div className=\"wfm-cross-device__text\">\n <p>{text}</p>\n </div>\n <div className=\"wfm-cross-device__illustration\">\n {illustration ?? (\n <Graphic.Illustration.IllustrationCrossDevice width={224} height={224} />\n )}\n </div>\n </div>\n\n <Button\n className=\"wfm-cross-device__button\"\n color=\"blue\"\n size=\"medium\"\n onClick={onButtonClick}\n >\n {buttonLabel}\n </Button>\n </div>\n </div>\n );\n};\n\nCrossDevice.displayName = 'CrossDevice';\n","/**\n * CrossDeviceInfo / 跨设备域名信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 19831:418328 / Type=Default / 402×92\n *\n * 用途:CrossDevice 主组件之外的次级提示卡,展示「在 work.weixin.qq.com/login 登录」类指引。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4):\n * BLK-2 URL 字号 17/Semibold —— 字典在本节点未命中;CSS 用同值 var + font-weight: 600 + TODO\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './CrossDeviceInfo.css';\n\nexport interface CrossDeviceInfoProps extends BaseProps {\n /** 提示文本(缺省「文本」) */\n text?: React.ReactNode;\n /** URL 文本(缺省「work.weixin.qq.com/login」) */\n url?: React.ReactNode;\n}\n\nexport const CrossDeviceInfo: React.FC<CrossDeviceInfoProps> = ({\n text = '文本',\n url = 'work.weixin.qq.com/login',\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device-info', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device-info__content\">\n <p className=\"wfm-cross-device-info__label\">{text}</p>\n <p className=\"wfm-cross-device-info__url\">{url}</p>\n </div>\n </div>\n );\n};\n\nCrossDeviceInfo.displayName = 'CrossDeviceInfo';\n","/**\n * ContactsPicker / 联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md\n * 主组件 6 Variant:Type=Default|Range × Segment=None|Organization|Tags × Status=Default|Searching\n *\n * 实现策略:消费 mobile 库 SearchBox + SegmentedControl + TableView 三个原子,\n * 仅做\"分组容器 + Section Header + 槽位组装\"。Cell 内容由消费侧通过 children 注入。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度(Type/Segment/Status 是数据驱动 Variant)。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-2 cell 内部细节(委托 mobile/TableViewCell)、BLK-3 已选数字 chip、\n * BLK-4 A-Z 索引侧栏(待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport {\n SearchBox,\n SegmentedControl,\n type BaseProps,\n type SegmentedControlOptionItem,\n} from '@wecom-design/mobile';\nimport './ContactsPicker.css';\n\nexport type ContactsPickerType = 'default' | 'range';\nexport type ContactsPickerSegment = 'none' | 'organization' | 'tags';\nexport type ContactsPickerStatus = 'default' | 'searching';\n\nexport interface ContactsPickerSection {\n /** Section header 文本(如 \"已选联系人 (1)\"、\"最近联系人\") */\n header?: React.ReactNode;\n /** Section 内容(一组 Cell,由消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children: React.ReactNode;\n}\n\nexport interface ContactsPickerProps extends BaseProps {\n /** Figma Variant:Default | Range */\n type?: ContactsPickerType;\n /** Figma Variant:仅 Range 类型有效(None | Organization | Tags) */\n segment?: ContactsPickerSegment;\n /** Figma Variant:Default | Searching */\n status?: ContactsPickerStatus;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n /** Searching 状态下\"取消\"按钮回调(只在 status=\"searching\" 时有效) */\n onSearchCancel?: () => void;\n /** 搜索文本(受控) */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n\n /** Range 类型的 Tabs 选项;缺省 [{组织架构}, {标签}] */\n segmentOptions?: SegmentedControlOptionItem[];\n /** 当前 Tab 值(受控) */\n segmentValue?: string;\n onSegmentChange?: (value: string) => void;\n\n /** Section 列表(消费侧填充) */\n sections?: ContactsPickerSection[];\n /** 直接放进列表区域的自定义节点(覆盖 sections) */\n children?: React.ReactNode;\n}\n\nconst DEFAULT_SEGMENT_OPTIONS: SegmentedControlOptionItem[] = [\n { value: 'organization', label: '组织架构' },\n { value: 'tags', label: '标签' },\n];\n\nexport const ContactsPicker: React.FC<ContactsPickerProps> = ({\n type = 'default',\n segment = 'none',\n status = 'default',\n searchBar = true,\n onSearchCancel,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n segmentOptions,\n segmentValue,\n onSegmentChange,\n sections,\n children,\n className = '',\n style,\n}) => {\n const isRange = type === 'range';\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-contacts-picker',\n `wfm-contacts-picker--${type}`,\n isRange && `wfm-contacts-picker--segment-${segment}`,\n `wfm-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const resolvedSegmentOptions = segmentOptions ?? DEFAULT_SEGMENT_OPTIONS;\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {isRange && (\n <div className=\"wfm-contacts-picker__segment\">\n <SegmentedControl\n options={resolvedSegmentOptions}\n value={segmentValue}\n onChange={onSegmentChange}\n />\n </div>\n )}\n\n <div className=\"wfm-contacts-picker__list\">\n {children}\n {sections?.map((section, idx) => (\n <section key={idx} className=\"wfm-contacts-picker__section\">\n {section.header !== undefined && (\n <div className=\"wfm-contacts-picker__section-header\">\n {section.header}\n </div>\n )}\n {section.children}\n </section>\n ))}\n </div>\n </div>\n );\n};\n\nContactsPicker.displayName = 'ContactsPicker';\n","/**\n * SecondaryContactsPicker / 次级联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.2\n * 4 Variant:Type=My Customers|Company Contacts|WeChat Contacts × Status=Default|Searching\n *\n * 用于 ContactsPicker 选中某分类后展开的二级页面(\"我的客户\"/\"企业通讯录\"/\"微信通讯录\")。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-3 已选数字 chip、BLK-4 A-Z 索引侧栏(待 IndexBar 大类)\n */\nimport React from 'react';\nimport { SearchBox, type BaseProps } from '@wecom-design/mobile';\nimport './SecondaryContactsPicker.css';\n\nexport type SecondaryContactsPickerType =\n | 'my-customers'\n | 'company-contacts'\n | 'wechat-contacts';\n\nexport type SecondaryContactsPickerStatus = 'default' | 'searching';\n\nexport interface SecondaryContactsPickerProps extends BaseProps {\n type?: SecondaryContactsPickerType;\n status?: SecondaryContactsPickerStatus;\n\n /** 顶部筛选 / 面包屑文本(如 \"根据标签筛选 ∨\"、\"企业通讯录 / 产品部\"),缺省不显示 */\n filter?: React.ReactNode;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n onSearchCancel?: () => void;\n\n /** 列表内容(消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children?: React.ReactNode;\n}\n\nexport const SecondaryContactsPicker: React.FC<SecondaryContactsPickerProps> = ({\n type = 'my-customers',\n status = 'default',\n filter,\n searchBar = true,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n onSearchCancel,\n children,\n className = '',\n style,\n}) => {\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-secondary-contacts-picker',\n `wfm-secondary-contacts-picker--${type}`,\n `wfm-secondary-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-secondary-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-secondary-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {filter !== undefined && (\n <div className=\"wfm-secondary-contacts-picker__filter\">{filter}</div>\n )}\n\n <div className=\"wfm-secondary-contacts-picker__list\">{children}</div>\n </div>\n );\n};\n\nSecondaryContactsPicker.displayName = 'SecondaryContactsPicker';\n","/**\n * ContactsTableView / 联系人列表视图(部件)[Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.3 / §1.6\n * 6 Variant:Type=Recent Contacts|Organization|Tags × Status=Default|Searching\n *\n * 用作 ContactsPicker / SecondaryContactsPicker 的子部件,渲染单一类型的联系人/组织/标签列表。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-4 A-Z 索引侧栏(本组件保留 indexBar 槽,待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './ContactsTableView.css';\n\nexport type ContactsTableViewType = 'recent-contacts' | 'organization' | 'tags';\nexport type ContactsTableViewStatus = 'default' | 'searching';\n\nexport interface ContactsTableViewProps extends BaseProps {\n type?: ContactsTableViewType;\n status?: ContactsTableViewStatus;\n\n /** 列表内容(消费侧填充 mobile 库 TableViewCell) */\n children?: React.ReactNode;\n\n /** A-Z 索引侧栏节点(BLK-4,待 IndexBar 大类完成后由消费侧注入) */\n indexBar?: React.ReactNode;\n}\n\nexport const ContactsTableView: React.FC<ContactsTableViewProps> = ({\n type = 'recent-contacts',\n status = 'default',\n children,\n indexBar,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-contacts-table-view',\n `wfm-contacts-table-view--${type}`,\n `wfm-contacts-table-view--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-contacts-table-view__list\">{children}</div>\n {indexBar !== undefined && (\n <div className=\"wfm-contacts-table-view__index-bar\">{indexBar}</div>\n )}\n </div>\n );\n};\n\nContactsTableView.displayName = 'ContactsTableView';\n","/**\n * EmoticonSheet / 表情面板 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.1 / §1.1\n * 1 Variant:Type=Default(402×386)\n *\n * 实现策略:本组件提供\"Tab Bar + 内容 + Bottom Bar\"三段式外壳容器。\n * 内容(Section header + EmoticonGrid + EmoticonItem)由消费侧通过 children 组合。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-2(Home Indicator h=34,token 包未导出 safe_area_ios var)、\n * BLK-4(Tab Bar 高度估算)、BLK-5(Bottom Bar 高度自然撑开)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonSheet.css';\n\nexport interface EmoticonSheetTab {\n key: string;\n /** Tab icon 节点(消费侧注入) */\n icon: React.ReactNode;\n active?: boolean;\n}\n\nexport interface EmoticonSheetProps extends BaseProps {\n /** Tab Bar 选项 */\n tabs?: EmoticonSheetTab[];\n onTabChange?: (key: string) => void;\n\n /** 主内容(一组 Section header + EmoticonGrid,由消费侧组装) */\n children?: React.ReactNode;\n\n /** 删除按钮点击回调(缺省渲染) */\n onDelete?: () => void;\n /** 自定义删除按钮节点(缺省渲染默认外形) */\n deleteSlot?: React.ReactNode;\n\n /** 发送按钮文本(缺省「发送」) */\n sendLabel?: React.ReactNode;\n onSend?: () => void;\n /** 发送按钮是否禁用 */\n sendDisabled?: boolean;\n\n /** 是否预留底部安全区(Home Indicator 占位) */\n homeIndicator?: boolean;\n}\n\nexport const EmoticonSheet: React.FC<EmoticonSheetProps> = ({\n tabs,\n onTabChange,\n children,\n onDelete,\n deleteSlot,\n sendLabel = '发送',\n onSend,\n sendDisabled = false,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const cls = ['wfm-emoticon-sheet', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n {tabs && tabs.length > 0 && (\n <div className=\"wfm-emoticon-sheet__tab-bar\" role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.active}\n className={[\n 'wfm-emoticon-sheet__tab',\n tab.active && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.icon}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"wfm-emoticon-sheet__content\">{children}</div>\n\n <div className=\"wfm-emoticon-sheet__bottom-bar\">\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__delete\"\n onClick={onDelete}\n aria-label=\"删除\"\n >\n {deleteSlot}\n </button>\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__send\"\n onClick={onSend}\n disabled={sendDisabled}\n >\n {sendLabel}\n </button>\n </div>\n\n {homeIndicator && <div className=\"wfm-emoticon-sheet__home-indicator\" />}\n </div>\n );\n};\n\nEmoticonSheet.displayName = 'EmoticonSheet';\n","/**\n * EmoticonGrid / 表情网格 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.2 / §1.2-§1.4\n * 3 Variant:Type=WeChat Face(7 列)| Favorites(4 列)| Big Face(4 列)\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-3(行/列 gap 字典无独立 token,估算 space_small_xl=8)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonGrid.css';\n\nexport type EmoticonGridType = 'wechat-face' | 'favorites' | 'big-face';\n\nexport interface EmoticonGridProps extends BaseProps {\n type?: EmoticonGridType;\n /** Cell 内容(消费侧用 EmoticonItem 渲染) */\n children?: React.ReactNode;\n}\n\nexport const EmoticonGrid: React.FC<EmoticonGridProps> = ({\n type = 'wechat-face',\n children,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-grid',\n `wfm-emoticon-grid--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n};\n\nEmoticonGrid.displayName = 'EmoticonGrid';\n","/**\n * EmoticonItem / 表情项 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.3 / §1.5-§1.7\n * 6 Variant:Type=WeChat Face | Favorites | WeChat Big Face × State=Normal | Pressed\n *\n * 状态:含 §9.1 State Variant(Normal | Pressed),无 Selection/Focus 维度。\n *\n * BLOCKED:BLK-1(Pressed 视觉变淡程度,字典空,opacity:0.5 user override)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonItem.css';\n\nexport type EmoticonItemType = 'wechat-face' | 'favorites' | 'big-face';\nexport type EmoticonItemState = 'normal' | 'pressed';\n\nexport interface EmoticonItemProps extends BaseProps {\n type?: EmoticonItemType;\n /** 显式 pressed 状态(受控);缺省由 :active 伪类驱动 */\n state?: EmoticonItemState;\n /** 主体内容:emoji glyph、收藏图片、Big Face 圆形 emoji 等 */\n children?: React.ReactNode;\n /** Big Face 下方文本标签(仅 type=big-face 渲染) */\n label?: React.ReactNode;\n /** Favorites 底部水印文本(仅 type=favorites 渲染) */\n watermark?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const EmoticonItem: React.FC<EmoticonItemProps> = ({\n type = 'wechat-face',\n state = 'normal',\n children,\n label,\n watermark,\n onClick,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-item',\n `wfm-emoticon-item--${type}`,\n state === 'pressed' && 'is-pressed',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type=\"button\" className={cls} style={style} onClick={onClick}>\n <span className=\"wfm-emoticon-item__body\">{children}</span>\n {type === 'favorites' && watermark !== undefined && (\n <span className=\"wfm-emoticon-item__watermark\">{watermark}</span>\n )}\n {type === 'big-face' && label !== undefined && (\n <span className=\"wfm-emoticon-item__label\">{label}</span>\n )}\n </button>\n );\n};\n\nEmoticonItem.displayName = 'EmoticonItem';\n"],"names":["AppInfoHeader","avatar","title","jsxs","jsx","AppInfo","type","header","description","sections","className","style","cls","TableView","TableViewCell","rows","idx","React","SectionFooter","row","rIdx","Fragment","Shutter","forwardRef","ref","DEFAULT_TABS","CameraBottom","tabs","activeTab","onTabChange","shutter","onShutter","leftLabel","onLeftClick","rightLabel","onRightClick","homeIndicator","isDefault","isDone","resolvedLeft","resolvedRight","tab","isActive","BarControlLeft","BarButton","BarControlRight","CrossDevice","text","illustration","buttonLabel","onButtonClick","Graphic","Button","CrossDeviceInfo","url","DEFAULT_SEGMENT_OPTIONS","ContactsPicker","segment","status","searchBar","onSearchCancel","searchValue","onSearchChange","searchPlaceholder","segmentOptions","segmentValue","onSegmentChange","children","isRange","isSearching","SearchBox","SegmentedControl","section","SecondaryContactsPicker","filter","ContactsTableView","indexBar","EmoticonSheet","onDelete","deleteSlot","sendLabel","onSend","sendDisabled","EmoticonGrid","EmoticonItem","state","label","watermark","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/components/AppInfo/AppInfo.tsx","../src/components/Camera/Shutter.tsx","../src/components/Camera/CameraBottom.tsx","../src/components/CrossDevice/CrossDevice.tsx","../src/components/CrossDevice/CrossDeviceInfo.tsx","../src/components/ContactsPicker/ContactsPicker.tsx","../src/components/ContactsPicker/SecondaryContactsPicker.tsx","../src/components/ContactsPicker/ContactsTableView.tsx","../src/components/EmoticonSheet/EmoticonSheet.tsx","../src/components/EmoticonSheet/EmoticonGrid.tsx","../src/components/EmoticonSheet/EmoticonItem.tsx"],"sourcesContent":["/**\n * AppInfo / 应用信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证审计:prompts/_audit/foundation-mobile/AppInfo.md\n *\n * 实现策略:消费 mobile 库的 TableView / TableViewCell / SectionFooter\n * 三个原子,仅通过 .wfm-app-info__* 修饰类覆盖与 Figma 真值的差量字段。\n *\n * 变体矩阵(取证已通过):\n * Type: App | Smart App\n *\n * - App / Section 1(描述行 78h):Cell-Left \"应用描述\" + 多行说明\n * - App / Section 2(数据行 56h):标题 + 数值 + chevron\n * - Smart App / Section 1:同 App\n * - Smart App / Section 2(AI 点数行 56h):标题 + ⓘ + Smart Point + 99 点 + chevron\n * - Smart App / Section 3(链接行 56h):标题 + chevron\n */\nimport React from 'react';\nimport {\n TableView,\n TableViewCell,\n SectionFooter,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport './AppInfo.css';\n\nexport type AppInfoType = 'app' | 'smart-app';\n\n/** Header 区:Avatar + 应用名 */\nexport interface AppInfoHeaderData {\n /** Avatar 节点(建议 64×64,由消费侧提供) */\n avatar?: React.ReactNode;\n /** 应用名 */\n title: React.ReactNode;\n}\n\n/** 描述行:Cell-Left \"应用描述\" + 多行说明 */\nexport interface AppInfoDescription {\n /** 左侧标签文案,默认 \"应用描述\" */\n label?: React.ReactNode;\n /** 右侧多行说明文案 */\n text: React.ReactNode;\n}\n\n/** 普通数据/链接行 */\nexport interface AppInfoRow {\n /** 标题 */\n title: React.ReactNode;\n /** 标题右侧的额外 icon(例如 ⓘ) */\n titleExtraRight?: React.ReactNode;\n /** Accessory 区右对齐文本(如 \"99 点\",可选) */\n trailingText?: React.ReactNode;\n /** Accessory 区文本前的额外节点(如 Smart Point 12×12) */\n trailingLeading?: React.ReactNode;\n /** chevron 节点(由消费侧通过 children 注入;缺省不渲染右箭头) */\n chevron?: React.ReactNode;\n /** 点击回调 */\n onClick?: () => void;\n}\n\nexport interface AppInfoProps extends BaseProps {\n /** 类型变体 */\n type?: AppInfoType;\n /** Header 信息 */\n header: AppInfoHeaderData;\n /** Section 1 描述行 */\n description: AppInfoDescription;\n /** 后续 Section 行(每个数组元素 = 一个 Section,由 SectionFooter Blank 8h 间隔) */\n sections: AppInfoRow[][];\n}\n\n/** Header 子组件 */\nconst AppInfoHeader: React.FC<AppInfoHeaderData> = ({ avatar, title }) => (\n <div className=\"wfm-app-info__header\">\n {avatar !== undefined && (\n <div className=\"wfm-app-info__header-avatar\">{avatar}</div>\n )}\n <div className=\"wfm-app-info__header-title\">{title}</div>\n <div className=\"wfm-app-info__header-separator\" />\n </div>\n);\n\nexport const AppInfo: React.FC<AppInfoProps> = ({\n type = 'app',\n header,\n description,\n sections,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-app-info',\n `wfm-app-info--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <AppInfoHeader {...header} />\n\n {/* Section 1 — 描述行(78h,Cell-Left \"应用描述\" + 多行说明) */}\n <TableView tableStyle=\"plain\" separator={false}>\n <TableViewCell\n className=\"wfm-app-info__desc-row\"\n left={\n <span className=\"wfm-app-info__desc-label\">\n {description.label ?? '应用描述'}\n </span>\n }\n title={\n <span className=\"wfm-app-info__desc-text\">{description.text}</span>\n }\n />\n </TableView>\n\n {/* 后续 Section(每个 Section 之间 SectionFooter Blank 8h) */}\n {sections.map((rows, idx) => (\n <React.Fragment key={idx}>\n <SectionFooter type=\"blank\" />\n <TableView tableStyle=\"plain\" separator>\n {rows.map((row, rIdx) => (\n <TableViewCell\n key={rIdx}\n className=\"wfm-app-info__row\"\n title={row.title}\n titleExtraRight={row.titleExtraRight}\n accessory={\n row.trailingText !== undefined ||\n row.trailingLeading !== undefined ||\n row.chevron !== undefined ? (\n <>\n {row.trailingLeading !== undefined && (\n <span className=\"wfm-app-info__row-leading\">\n {row.trailingLeading}\n </span>\n )}\n {row.trailingText !== undefined && (\n <span className=\"wfm-app-info__row-text\">\n {row.trailingText}\n </span>\n )}\n {row.chevron !== undefined && (\n <span className=\"wfm-app-info__row-chevron\">\n {row.chevron}\n </span>\n )}\n </>\n ) : undefined\n }\n accessoryType={row.chevron !== undefined ? 'chevron' : undefined}\n onClick={row.onClick}\n />\n ))}\n </TableView>\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nAppInfo.displayName = 'AppInfo';\n","/**\n * Shutter / 快门 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md §1.3 / §6\n * 节点 22725:442897 / Type=Default / 68×68\n *\n * Shutter 不是图标资产(user override 2026-06-24),是组件自带几何:\n * 68×68 白描边空心圆,描边宽度 4px 由 screenshot 视觉确定。\n */\nimport { forwardRef } from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './Shutter.css';\n\nexport interface ShutterProps extends BaseProps {}\n\nexport const Shutter = forwardRef<HTMLDivElement, ShutterProps>(\n ({ className = '', style }, ref) => {\n const cls = ['wfm-shutter', className].filter(Boolean).join(' ');\n return <div ref={ref} className={cls} style={style} role=\"img\" aria-label=\"快门\" />;\n }\n);\n\nShutter.displayName = 'Shutter';\n","/**\n * CameraBottom / 相机底部 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/Camera.md\n * - Type=Default 节点 22726:450517(402×158,含 Shutter + Tab)\n * - Type=Done 节点 22848:444585(402×158,无 Shutter,Tab 留 28h spacer)\n *\n * 实现策略:消费 mobile 库 BarControlLeft / BarControlRight / BarButton 三个原子,\n * 仅通过 .wfm-camera-bottom__* 修饰类覆盖 Camera 深色背景下与 Figma 真值的差量字段\n * (文字白色 + 内部高度 + flex:1)。Tab 区与外层布局 wfm 自实现。\n *\n * BLOCKED 字段(Camera.md §4,CSS 中保留 TODO):\n * BLK-1 Content py=14、BLK-2 pl/pr=18、BLK-3 内部高度 44/68、\n * BLK-4 Done Tab spacer=28、BLK-5 Home Indicator(不实现,仅留 props 槽)。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。Tab 项「选中色」是数据驱动的颜色变化。\n */\nimport React from 'react';\nimport {\n BarControlLeft,\n BarControlRight,\n BarButton,\n type BaseProps,\n} from '@wecom-design/mobile';\nimport { Shutter } from './Shutter';\nimport './CameraBottom.css';\n\nexport type CameraBottomType = 'default' | 'done';\n\nexport type CameraTabKey = 'video' | 'photo' | 'document';\n\nexport interface CameraTabItem {\n key: CameraTabKey;\n label: React.ReactNode;\n}\n\nexport interface CameraBottomProps extends BaseProps {\n /** Type=Default | Done(Figma Variant) */\n type?: CameraBottomType;\n\n /* ═══ Default 专属:Tab + Shutter ═══ */\n /** Tab 列表(仅 Default)。缺省 [视频, 照片, 文档] */\n tabs?: CameraTabItem[];\n /** 当前选中 Tab key(仅 Default)。缺省 'photo' */\n activeTab?: CameraTabKey;\n /** Tab 切换回调 */\n onTabChange?: (key: CameraTabKey) => void;\n /** Shutter 自定义节点(缺省渲染默认 Shutter 几何) */\n shutter?: React.ReactNode;\n /** Shutter 点击回调(仅 Default) */\n onShutter?: () => void;\n\n /* ═══ 左右按钮(Default | Done 共有,文案不同) ═══ */\n /** 左侧按钮文本(Default 缺省「取消」,Done 缺省「重拍」) */\n leftLabel?: React.ReactNode;\n onLeftClick?: () => void;\n /** 右侧按钮文本(Default 缺省「文本」,Done 缺省「使用照片」) */\n rightLabel?: React.ReactNode;\n onRightClick?: () => void;\n\n /* ═══ Home Indicator(Camera.md BLK-5:不在本组件实现) ═══ */\n /** 是否预留底部安全区。本组件仅留视觉占位,不渲染 Home Indicator 视觉(待 HomeIndicator 大类落地) */\n homeIndicator?: boolean;\n}\n\nconst DEFAULT_TABS: CameraTabItem[] = [\n { key: 'video', label: '视频' },\n { key: 'photo', label: '照片' },\n { key: 'document', label: '文档' },\n];\n\nexport const CameraBottom: React.FC<CameraBottomProps> = ({\n type = 'default',\n tabs = DEFAULT_TABS,\n activeTab = 'photo',\n onTabChange,\n shutter,\n onShutter,\n leftLabel,\n onLeftClick,\n rightLabel,\n onRightClick,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const isDefault = type === 'default';\n const isDone = type === 'done';\n\n const cls = [\n 'wfm-camera-bottom',\n `wfm-camera-bottom--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n /* 左右按钮文本:Default = 取消 / 文本(Regular),Done = 重拍 / 使用照片(右侧 body_strong = Medium)*/\n const resolvedLeft = leftLabel ?? (isDone ? '重拍' : '取消');\n const resolvedRight = rightLabel ?? (isDone ? '使用照片' : '文本');\n\n return (\n <div className={cls} style={style}>\n {/* ─── Tab 区 ─── */}\n {isDefault ? (\n <div className=\"wfm-camera-bottom__tab\" role=\"tablist\">\n {tabs.map((tab) => {\n const isActive = tab.key === activeTab;\n return (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={[\n 'wfm-camera-bottom__tab-item',\n isActive && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n ) : (\n /* Done 态:28h 空 spacer(BLK-4,无 token 来源) */\n <div className=\"wfm-camera-bottom__tab wfm-camera-bottom__tab--spacer\" />\n )}\n\n {/* ─── Content 区:左按钮 + Shutter(仅 Default)+ 右按钮 ─── */}\n <div className=\"wfm-camera-bottom__content\">\n <BarControlLeft className=\"wfm-camera-bottom__action wfm-camera-bottom__action--left\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedLeft}\n onClick={onLeftClick}\n className=\"wfm-camera-bottom__bar-button\"\n />\n </BarControlLeft>\n\n {isDefault && (\n <button\n type=\"button\"\n className=\"wfm-camera-bottom__shutter-slot\"\n onClick={onShutter}\n aria-label=\"拍摄\"\n >\n {shutter ?? <Shutter />}\n </button>\n )}\n\n <BarControlRight className=\"wfm-camera-bottom__action wfm-camera-bottom__action--right\">\n <BarButton\n type=\"text\"\n emphasis=\"default\"\n label={resolvedRight}\n onClick={onRightClick}\n className={[\n 'wfm-camera-bottom__bar-button',\n isDone && 'wfm-camera-bottom__bar-button--strong',\n ]\n .filter(Boolean)\n .join(' ')}\n />\n </BarControlRight>\n </div>\n\n {/* ─── Home Indicator 占位(BLK-5,不实现视觉) ─── */}\n {homeIndicator && <div className=\"wfm-camera-bottom__home-indicator\" />}\n </div>\n );\n};\n\nCameraBottom.displayName = 'CameraBottom';\n","/**\n * CrossDevice / 跨设备 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 18629:394998 / Type=Default / 402×720\n *\n * 实现策略:消费 mobile 库 Button + general 库 IllustrationCrossDevice,\n * 仅通过 .wfm-cross-device__* 修饰类组装外壳与覆盖差量字段。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4,CSS 中保留 TODO):\n * BLK-1 Button py=9、BLK-3 Top Text width=289、BLK-4 Button width=224\n */\nimport React from 'react';\nimport { Button, type BaseProps } from '@wecom-design/mobile';\nimport { Graphic } from '@wecom-design/general';\nimport './CrossDevice.css';\n\nexport interface CrossDeviceProps extends BaseProps {\n /** 主文本(缺省「文本」) */\n text?: React.ReactNode;\n /** 自定义插画节点;缺省渲染 @wecom-design/general 的 IllustrationCrossDevice */\n illustration?: React.ReactNode;\n /** 按钮文本(缺省「文本」) */\n buttonLabel?: React.ReactNode;\n /** 按钮点击回调 */\n onButtonClick?: () => void;\n}\n\nexport const CrossDevice: React.FC<CrossDeviceProps> = ({\n text = '文本',\n illustration,\n buttonLabel = '文本',\n onButtonClick,\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device__content\">\n <div className=\"wfm-cross-device__top\">\n <div className=\"wfm-cross-device__text\">\n <p>{text}</p>\n </div>\n <div className=\"wfm-cross-device__illustration\">\n {illustration ?? (\n <Graphic.Illustration.IllustrationCrossDevice width={224} height={224} />\n )}\n </div>\n </div>\n\n <Button\n className=\"wfm-cross-device__button\"\n color=\"blue\"\n size=\"medium\"\n onClick={onButtonClick}\n >\n {buttonLabel}\n </Button>\n </div>\n </div>\n );\n};\n\nCrossDevice.displayName = 'CrossDevice';\n","/**\n * CrossDeviceInfo / 跨设备域名信息 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/CrossDevice.md\n * 节点 19831:418328 / Type=Default / 402×92\n *\n * 用途:CrossDevice 主组件之外的次级提示卡,展示「在 work.weixin.qq.com/login 登录」类指引。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度。\n *\n * BLOCKED 字段(CrossDevice.md §4):\n * BLK-2 URL 字号 17/Semibold —— 字典在本节点未命中;CSS 用同值 var + font-weight: 600 + TODO\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './CrossDeviceInfo.css';\n\nexport interface CrossDeviceInfoProps extends BaseProps {\n /** 提示文本(缺省「文本」) */\n text?: React.ReactNode;\n /** URL 文本(缺省「work.weixin.qq.com/login」) */\n url?: React.ReactNode;\n}\n\nexport const CrossDeviceInfo: React.FC<CrossDeviceInfoProps> = ({\n text = '文本',\n url = 'work.weixin.qq.com/login',\n className = '',\n style,\n}) => {\n const cls = ['wfm-cross-device-info', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-cross-device-info__content\">\n <p className=\"wfm-cross-device-info__label\">{text}</p>\n <p className=\"wfm-cross-device-info__url\">{url}</p>\n </div>\n </div>\n );\n};\n\nCrossDeviceInfo.displayName = 'CrossDeviceInfo';\n","/**\n * ContactsPicker / 联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md\n * 主组件 6 Variant:Type=Default|Range × Segment=None|Organization|Tags × Status=Default|Searching\n *\n * 实现策略:消费 mobile 库 SearchBox + SegmentedControl + TableView 三个原子,\n * 仅做\"分组容器 + Section Header + 槽位组装\"。Cell 内容由消费侧通过 children 注入。\n *\n * 状态:本组件无 §9 State/Selection/Focus 维度(Type/Segment/Status 是数据驱动 Variant)。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-2 cell 内部细节(委托 mobile/TableViewCell)、BLK-3 已选数字 chip、\n * BLK-4 A-Z 索引侧栏(待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport {\n SearchBox,\n SegmentedControl,\n type BaseProps,\n type SegmentedControlOptionItem,\n} from '@wecom-design/mobile';\nimport './ContactsPicker.css';\n\nexport type ContactsPickerType = 'default' | 'range';\nexport type ContactsPickerSegment = 'none' | 'organization' | 'tags';\nexport type ContactsPickerStatus = 'default' | 'searching';\n\nexport interface ContactsPickerSection {\n /** Section header 文本(如 \"已选联系人 (1)\"、\"最近联系人\") */\n header?: React.ReactNode;\n /** Section 内容(一组 Cell,由消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children: React.ReactNode;\n}\n\nexport interface ContactsPickerProps extends BaseProps {\n /** Figma Variant:Default | Range */\n type?: ContactsPickerType;\n /** Figma Variant:仅 Range 类型有效(None | Organization | Tags) */\n segment?: ContactsPickerSegment;\n /** Figma Variant:Default | Searching */\n status?: ContactsPickerStatus;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n /** Searching 状态下\"取消\"按钮回调(只在 status=\"searching\" 时有效) */\n onSearchCancel?: () => void;\n /** 搜索文本(受控) */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n\n /** Range 类型的 Tabs 选项;缺省 [{组织架构}, {标签}] */\n segmentOptions?: SegmentedControlOptionItem[];\n /** 当前 Tab 值(受控) */\n segmentValue?: string;\n onSegmentChange?: (value: string) => void;\n\n /** Section 列表(消费侧填充) */\n sections?: ContactsPickerSection[];\n /** 直接放进列表区域的自定义节点(覆盖 sections) */\n children?: React.ReactNode;\n}\n\nconst DEFAULT_SEGMENT_OPTIONS: SegmentedControlOptionItem[] = [\n { value: 'organization', label: '组织架构' },\n { value: 'tags', label: '标签' },\n];\n\nexport const ContactsPicker: React.FC<ContactsPickerProps> = ({\n type = 'default',\n segment = 'none',\n status = 'default',\n searchBar = true,\n onSearchCancel,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n segmentOptions,\n segmentValue,\n onSegmentChange,\n sections,\n children,\n className = '',\n style,\n}) => {\n const isRange = type === 'range';\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-contacts-picker',\n `wfm-contacts-picker--${type}`,\n isRange && `wfm-contacts-picker--segment-${segment}`,\n `wfm-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const resolvedSegmentOptions = segmentOptions ?? DEFAULT_SEGMENT_OPTIONS;\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {isRange && (\n <div className=\"wfm-contacts-picker__segment\">\n <SegmentedControl\n options={resolvedSegmentOptions}\n value={segmentValue}\n onChange={onSegmentChange}\n />\n </div>\n )}\n\n <div className=\"wfm-contacts-picker__list\">\n {children}\n {sections?.map((section, idx) => (\n <section key={idx} className=\"wfm-contacts-picker__section\">\n {section.header !== undefined && (\n <div className=\"wfm-contacts-picker__section-header\">\n {section.header}\n </div>\n )}\n {section.children}\n </section>\n ))}\n </div>\n </div>\n );\n};\n\nContactsPicker.displayName = 'ContactsPicker';\n","/**\n * SecondaryContactsPicker / 次级联系人选择器 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.2\n * 4 Variant:Type=My Customers|Company Contacts|WeChat Contacts × Status=Default|Searching\n *\n * 用于 ContactsPicker 选中某分类后展开的二级页面(\"我的客户\"/\"企业通讯录\"/\"微信通讯录\")。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-3 已选数字 chip、BLK-4 A-Z 索引侧栏(待 IndexBar 大类)\n */\nimport React from 'react';\nimport { SearchBox, type BaseProps } from '@wecom-design/mobile';\nimport './SecondaryContactsPicker.css';\n\nexport type SecondaryContactsPickerType =\n | 'my-customers'\n | 'company-contacts'\n | 'wechat-contacts';\n\nexport type SecondaryContactsPickerStatus = 'default' | 'searching';\n\nexport interface SecondaryContactsPickerProps extends BaseProps {\n type?: SecondaryContactsPickerType;\n status?: SecondaryContactsPickerStatus;\n\n /** 顶部筛选 / 面包屑文本(如 \"根据标签筛选 ∨\"、\"企业通讯录 / 产品部\"),缺省不显示 */\n filter?: React.ReactNode;\n\n /** 是否显示搜索栏,缺省 true */\n searchBar?: boolean;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n searchPlaceholder?: string;\n onSearchCancel?: () => void;\n\n /** 列表内容(消费侧使用 mobile 库 TableViewCell 自行渲染) */\n children?: React.ReactNode;\n}\n\nexport const SecondaryContactsPicker: React.FC<SecondaryContactsPickerProps> = ({\n type = 'my-customers',\n status = 'default',\n filter,\n searchBar = true,\n searchValue,\n onSearchChange,\n searchPlaceholder = '搜索',\n onSearchCancel,\n children,\n className = '',\n style,\n}) => {\n const isSearching = status === 'searching';\n\n const cls = [\n 'wfm-secondary-contacts-picker',\n `wfm-secondary-contacts-picker--${type}`,\n `wfm-secondary-contacts-picker--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {searchBar && (\n <div className=\"wfm-secondary-contacts-picker__search\">\n <SearchBox\n color=\"white\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={onSearchChange}\n />\n {isSearching && (\n <button\n type=\"button\"\n className=\"wfm-secondary-contacts-picker__search-cancel\"\n onClick={onSearchCancel}\n >\n 取消\n </button>\n )}\n </div>\n )}\n\n {filter !== undefined && (\n <div className=\"wfm-secondary-contacts-picker__filter\">{filter}</div>\n )}\n\n <div className=\"wfm-secondary-contacts-picker__list\">{children}</div>\n </div>\n );\n};\n\nSecondaryContactsPicker.displayName = 'SecondaryContactsPicker';\n","/**\n * ContactsTableView / 联系人列表视图(部件)[Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/ContactsPicker.md §0.3 / §1.6\n * 6 Variant:Type=Recent Contacts|Organization|Tags × Status=Default|Searching\n *\n * 用作 ContactsPicker / SecondaryContactsPicker 的子部件,渲染单一类型的联系人/组织/标签列表。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED 字段(ContactsPicker.md §4,CSS 中保留 TODO):\n * BLK-4 A-Z 索引侧栏(本组件保留 indexBar 槽,待 IndexBar 大类落地)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './ContactsTableView.css';\n\nexport type ContactsTableViewType = 'recent-contacts' | 'organization' | 'tags';\nexport type ContactsTableViewStatus = 'default' | 'searching';\n\nexport interface ContactsTableViewProps extends BaseProps {\n type?: ContactsTableViewType;\n status?: ContactsTableViewStatus;\n\n /** 列表内容(消费侧填充 mobile 库 TableViewCell) */\n children?: React.ReactNode;\n\n /** A-Z 索引侧栏节点(BLK-4,待 IndexBar 大类完成后由消费侧注入) */\n indexBar?: React.ReactNode;\n}\n\nexport const ContactsTableView: React.FC<ContactsTableViewProps> = ({\n type = 'recent-contacts',\n status = 'default',\n children,\n indexBar,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-contacts-table-view',\n `wfm-contacts-table-view--${type}`,\n `wfm-contacts-table-view--${status}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n <div className=\"wfm-contacts-table-view__list\">{children}</div>\n {indexBar !== undefined && (\n <div className=\"wfm-contacts-table-view__index-bar\">{indexBar}</div>\n )}\n </div>\n );\n};\n\nContactsTableView.displayName = 'ContactsTableView';\n","/**\n * EmoticonSheet / 表情面板 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.1 / §1.1\n * 1 Variant:Type=Default(402×386)\n *\n * 实现策略:本组件提供\"Tab Bar + 内容 + Bottom Bar\"三段式外壳容器。\n * 内容(Section header + EmoticonGrid + EmoticonItem)由消费侧通过 children 组合。\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-2(Home Indicator h=34,token 包未导出 safe_area_ios var)、\n * BLK-4(Tab Bar 高度估算)、BLK-5(Bottom Bar 高度自然撑开)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonSheet.css';\n\nexport interface EmoticonSheetTab {\n key: string;\n /** Tab icon 节点(消费侧注入) */\n icon: React.ReactNode;\n active?: boolean;\n}\n\nexport interface EmoticonSheetProps extends BaseProps {\n /** Tab Bar 选项 */\n tabs?: EmoticonSheetTab[];\n onTabChange?: (key: string) => void;\n\n /** 主内容(一组 Section header + EmoticonGrid,由消费侧组装) */\n children?: React.ReactNode;\n\n /** 删除按钮点击回调(缺省渲染) */\n onDelete?: () => void;\n /** 自定义删除按钮节点(缺省渲染默认外形) */\n deleteSlot?: React.ReactNode;\n\n /** 发送按钮文本(缺省「发送」) */\n sendLabel?: React.ReactNode;\n onSend?: () => void;\n /** 发送按钮是否禁用 */\n sendDisabled?: boolean;\n\n /** 是否预留底部安全区(Home Indicator 占位) */\n homeIndicator?: boolean;\n}\n\nexport const EmoticonSheet: React.FC<EmoticonSheetProps> = ({\n tabs,\n onTabChange,\n children,\n onDelete,\n deleteSlot,\n sendLabel = '发送',\n onSend,\n sendDisabled = false,\n homeIndicator = true,\n className = '',\n style,\n}) => {\n const cls = ['wfm-emoticon-sheet', className].filter(Boolean).join(' ');\n\n return (\n <div className={cls} style={style}>\n {tabs && tabs.length > 0 && (\n <div className=\"wfm-emoticon-sheet__tab-bar\" role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.active}\n className={[\n 'wfm-emoticon-sheet__tab',\n tab.active && 'is-active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => onTabChange?.(tab.key)}\n >\n {tab.icon}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"wfm-emoticon-sheet__content\">{children}</div>\n\n <div className=\"wfm-emoticon-sheet__bottom-bar\">\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__delete\"\n onClick={onDelete}\n aria-label=\"删除\"\n >\n {deleteSlot}\n </button>\n <button\n type=\"button\"\n className=\"wfm-emoticon-sheet__send\"\n onClick={onSend}\n disabled={sendDisabled}\n >\n {sendLabel}\n </button>\n </div>\n\n {homeIndicator && <div className=\"wfm-emoticon-sheet__home-indicator\" />}\n </div>\n );\n};\n\nEmoticonSheet.displayName = 'EmoticonSheet';\n","/**\n * EmoticonGrid / 表情网格 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.2 / §1.2-§1.4\n * 3 Variant:Type=WeChat Face(7 列)| Favorites(4 列)| Big Face(4 列)\n *\n * 状态:本组件无 §9 状态维度。\n *\n * BLOCKED:BLK-3(行/列 gap 字典无独立 token,估算 space_small_xl=8)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonGrid.css';\n\nexport type EmoticonGridType = 'wechat-face' | 'favorites' | 'big-face';\n\nexport interface EmoticonGridProps extends BaseProps {\n type?: EmoticonGridType;\n /** Cell 内容(消费侧用 EmoticonItem 渲染) */\n children?: React.ReactNode;\n}\n\nexport const EmoticonGrid: React.FC<EmoticonGridProps> = ({\n type = 'wechat-face',\n children,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-grid',\n `wfm-emoticon-grid--${type}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n};\n\nEmoticonGrid.displayName = 'EmoticonGrid';\n","/**\n * EmoticonItem / 表情项 [Foundation Mobile]\n * 06-foundation-mobile-library\n *\n * Figma 取证:prompts/_audit/foundation-mobile/EmoticonSheet.md §0.3 / §1.5-§1.7\n * 6 Variant:Type=WeChat Face | Favorites | WeChat Big Face × State=Normal | Pressed\n *\n * 状态:含 §9.1 State Variant(Normal | Pressed),无 Selection/Focus 维度。\n *\n * BLOCKED:BLK-1(Pressed 视觉变淡程度,字典空,opacity:0.5 user override)\n */\nimport React from 'react';\nimport type { BaseProps } from '@wecom-design/mobile';\nimport './EmoticonItem.css';\n\nexport type EmoticonItemType = 'wechat-face' | 'favorites' | 'big-face';\nexport type EmoticonItemState = 'normal' | 'pressed';\n\nexport interface EmoticonItemProps extends BaseProps {\n type?: EmoticonItemType;\n /** 显式 pressed 状态(受控);缺省由 :active 伪类驱动 */\n state?: EmoticonItemState;\n /** 主体内容:emoji glyph、收藏图片、Big Face 圆形 emoji 等 */\n children?: React.ReactNode;\n /** Big Face 下方文本标签(仅 type=big-face 渲染) */\n label?: React.ReactNode;\n /** Favorites 底部水印文本(仅 type=favorites 渲染) */\n watermark?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const EmoticonItem: React.FC<EmoticonItemProps> = ({\n type = 'wechat-face',\n state = 'normal',\n children,\n label,\n watermark,\n onClick,\n className = '',\n style,\n}) => {\n const cls = [\n 'wfm-emoticon-item',\n `wfm-emoticon-item--${type}`,\n state === 'pressed' && 'is-pressed',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type=\"button\" className={cls} style={style} onClick={onClick}>\n <span className=\"wfm-emoticon-item__body\">{children}</span>\n {type === 'favorites' && watermark !== undefined && (\n <span className=\"wfm-emoticon-item__watermark\">{watermark}</span>\n )}\n {type === 'big-face' && label !== undefined && (\n <span className=\"wfm-emoticon-item__label\">{label}</span>\n )}\n </button>\n );\n};\n\nEmoticonItem.displayName = 'EmoticonItem';\n"],"names":["AppInfoHeader","avatar","title","jsxs","jsx","AppInfo","type","header","description","sections","className","style","cls","TableView","TableViewCell","rows","idx","React","SectionFooter","row","rIdx","Fragment","Shutter","forwardRef","ref","DEFAULT_TABS","CameraBottom","tabs","activeTab","onTabChange","shutter","onShutter","leftLabel","onLeftClick","rightLabel","onRightClick","homeIndicator","isDefault","isDone","resolvedLeft","resolvedRight","tab","isActive","BarControlLeft","BarButton","BarControlRight","CrossDevice","text","illustration","buttonLabel","onButtonClick","Graphic","Button","CrossDeviceInfo","url","DEFAULT_SEGMENT_OPTIONS","ContactsPicker","segment","status","searchBar","onSearchCancel","searchValue","onSearchChange","searchPlaceholder","segmentOptions","segmentValue","onSegmentChange","children","isRange","isSearching","SearchBox","SegmentedControl","section","SecondaryContactsPicker","filter","ContactsTableView","indexBar","EmoticonSheet","onDelete","deleteSlot","sendLabel","onSend","sendDisabled","EmoticonGrid","EmoticonItem","state","label","watermark","onClick"],"mappings":";;;;AAyEA,MAAMA,IAA6C,CAAC,EAAE,QAAAC,GAAQ,OAAAC,QAC5D,gBAAAC,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAA;AAAA,EAAAF,MAAW,UACV,gBAAAG,EAAC,OAAA,EAAI,WAAU,+BAA+B,UAAAH,GAAO;AAAA,EAEvD,gBAAAG,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAF,GAAM;AAAA,EACnD,gBAAAE,EAAC,OAAA,EAAI,WAAU,iCAAA,CAAiC;AAAA,GAClD,GAGWC,IAAkC,CAAC;AAAA,EAC9C,MAAAC,IAAO;AAAA,EACP,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM;AAAA,IACV;AAAA,IACA,iBAAiBN,CAAI;AAAA,IACrBI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAP,EAAC,OAAA,EAAI,WAAWS,GAAK,OAAAD,GACnB,UAAA;AAAA,IAAA,gBAAAP,EAACJ,GAAA,EAAe,GAAGO,GAAQ;AAAA,IAG3B,gBAAAH,EAACS,GAAA,EAAU,YAAW,SAAQ,WAAW,IACvC,UAAA,gBAAAT;AAAA,MAACU;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MACE,gBAAAV,EAAC,QAAA,EAAK,WAAU,4BACb,UAAAI,EAAY,SAAS,QACxB;AAAA,QAEF,OACE,gBAAAJ,EAAC,QAAA,EAAK,WAAU,2BAA2B,YAAY,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA,GAGlE;AAAA,IAGCK,EAAS,IAAI,CAACM,GAAMC,MACnB,gBAAAb,EAACc,EAAM,UAAN,EACC,UAAA;AAAA,MAAA,gBAAAb,EAACc,GAAA,EAAc,MAAK,QAAA,CAAQ;AAAA,MAC5B,gBAAAd,EAACS,GAAA,EAAU,YAAW,SAAQ,WAAS,IACpC,UAAAE,EAAK,IAAI,CAACI,GAAKC,MACd,gBAAAhB;AAAA,QAACU;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UACV,OAAOK,EAAI;AAAA,UACX,iBAAiBA,EAAI;AAAA,UACrB,WACEA,EAAI,iBAAiB,UACrBA,EAAI,oBAAoB,UACxBA,EAAI,YAAY,SACd,gBAAAhB,EAAAkB,GAAA,EACG,UAAA;AAAA,YAAAF,EAAI,oBAAoB,UACvB,gBAAAf,EAAC,UAAK,WAAU,6BACb,YAAI,gBAAA,CACP;AAAA,YAEDe,EAAI,iBAAiB,UACpB,gBAAAf,EAAC,UAAK,WAAU,0BACb,YAAI,aAAA,CACP;AAAA,YAEDe,EAAI,YAAY,UACf,gBAAAf,EAAC,UAAK,WAAU,6BACb,YAAI,QAAA,CACP;AAAA,UAAA,EAAA,CAEJ,IACE;AAAA,UAEN,eAAee,EAAI,YAAY,SAAY,YAAY;AAAA,UACvD,SAASA,EAAI;AAAA,QAAA;AAAA,QA5BRC;AAAA,MAAA,CA8BR,EAAA,CACH;AAAA,IAAA,EAAA,GApCmBJ,CAqCrB,CACD;AAAA,EAAA,GACH;AAEJ;AAEAX,EAAQ,cAAc;ACnJf,MAAMiB,IAAUC;AAAA,EACrB,CAAC,EAAE,WAAAb,IAAY,IAAI,OAAAC,EAAA,GAASa,MAAQ;AAClC,UAAMZ,IAAM,CAAC,eAAeF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC/D,WAAO,gBAAAN,EAAC,SAAI,KAAAoB,GAAU,WAAWZ,GAAK,OAAAD,GAAc,MAAK,OAAM,cAAW,KAAA,CAAK;AAAA,EACjF;AACF;AAEAW,EAAQ,cAAc;AC2CtB,MAAMG,IAAgC;AAAA,EACpC,EAAE,KAAK,SAAS,OAAO,KAAA;AAAA,EACvB,EAAE,KAAK,SAAS,OAAO,KAAA;AAAA,EACvB,EAAE,KAAK,YAAY,OAAO,KAAA;AAC5B,GAEaC,IAA4C,CAAC;AAAA,EACxD,MAAApB,IAAO;AAAA,EACP,MAAAqB,IAAOF;AAAA,EACP,WAAAG,IAAY;AAAA,EACZ,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,WAAA1B,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAM0B,IAAY/B,MAAS,WACrBgC,IAAShC,MAAS,QAElBM,IAAM;AAAA,IACV;AAAA,IACA,sBAAsBN,CAAI;AAAA,IAC1BI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGL6B,IAAeP,MAAcM,IAAS,OAAO,OAC7CE,IAAgBN,MAAeI,IAAS,SAAS;AAEvD,SACE,gBAAAnC,EAAC,OAAA,EAAI,WAAWS,GAAK,OAAAD,GAElB,UAAA;AAAA,IAAA0B,IACC,gBAAAjC,EAAC,SAAI,WAAU,0BAAyB,MAAK,WAC1C,UAAAuB,EAAK,IAAI,CAACc,MAAQ;AACjB,YAAMC,IAAWD,EAAI,QAAQb;AAC7B,aACE,gBAAAxB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,iBAAesC;AAAA,UACf,WAAW;AAAA,YACT;AAAA,YACAA,KAAY;AAAA,UAAA,EAEX,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,SAAS,MAAMb,IAAcY,EAAI,GAAG;AAAA,UAEnC,UAAAA,EAAI;AAAA,QAAA;AAAA,QAZAA,EAAI;AAAA,MAAA;AAAA,IAef,CAAC,EAAA,CACH;AAAA;AAAA,MAGA,gBAAArC,EAAC,OAAA,EAAI,WAAU,wDAAA,CAAwD;AAAA;AAAA,IAIzE,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,MAAA,gBAAAC,EAACuC,GAAA,EAAe,WAAU,6DACxB,UAAA,gBAAAvC;AAAA,QAACwC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAS;AAAA,UACT,OAAOL;AAAA,UACP,SAASN;AAAA,UACT,WAAU;AAAA,QAAA;AAAA,MAAA,GAEd;AAAA,MAECI,KACC,gBAAAjC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS2B;AAAA,UACT,cAAW;AAAA,UAEV,UAAAD,uBAAYR,GAAA,CAAA,CAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,MAIzB,gBAAAlB,EAACyC,GAAA,EAAgB,WAAU,8DACzB,UAAA,gBAAAzC;AAAA,QAACwC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAS;AAAA,UACT,OAAOJ;AAAA,UACP,SAASL;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACAG,KAAU;AAAA,UAAA,EAET,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QAAA;AAAA,MAAA,EACb,CACF;AAAA,IAAA,GACF;AAAA,IAGCF,KAAiB,gBAAAhC,EAAC,OAAA,EAAI,WAAU,oCAAA,CAAoC;AAAA,EAAA,GACvE;AAEJ;AAEAsB,EAAa,cAAc;ACnJpB,MAAMoB,IAA0C,CAAC;AAAA,EACtD,MAAAC,IAAO;AAAA,EACP,cAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,eAAAC;AAAA,EACA,WAAAxC,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM,CAAC,oBAAoBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEpE,SACE,gBAAAN,EAAC,SAAI,WAAWQ,GAAK,OAAAD,GACnB,UAAA,gBAAAR,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAU,0BACb,UAAA,gBAAAA,EAAC,KAAA,EAAG,aAAK,EAAA,CACX;AAAA,MACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCACZ,eACC,gBAAAA,EAAC+C,EAAQ,aAAa,yBAArB,EAA6C,OAAO,KAAK,QAAQ,KAAK,EAAA,CAE3E;AAAA,IAAA,GACF;AAAA,IAEA,gBAAA/C;AAAA,MAACgD;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,MAAK;AAAA,QACL,SAASF;AAAA,QAER,UAAAD;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,EAAA,CACF,EAAA,CACF;AAEJ;AAEAH,EAAY,cAAc;AC3CnB,MAAMO,IAAkD,CAAC;AAAA,EAC9D,MAAAN,IAAO;AAAA,EACP,KAAAO,IAAM;AAAA,EACN,WAAA5C,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM,CAAC,yBAAyBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEzE,SACE,gBAAAN,EAAC,SAAI,WAAWQ,GAAK,OAAAD,GACnB,UAAA,gBAAAR,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,IAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,gCAAgC,UAAA2C,GAAK;AAAA,IAClD,gBAAA3C,EAAC,KAAA,EAAE,WAAU,8BAA8B,UAAAkD,EAAA,CAAI;AAAA,EAAA,EAAA,CACjD,EAAA,CACF;AAEJ;AAEAD,EAAgB,cAAc;ACsB9B,MAAME,IAAwD;AAAA,EAC5D,EAAE,OAAO,gBAAgB,OAAO,OAAA;AAAA,EAChC,EAAE,OAAO,QAAQ,OAAO,KAAA;AAC1B,GAEaC,IAAgD,CAAC;AAAA,EAC5D,MAAAlD,IAAO;AAAA,EACP,SAAAmD,IAAU;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,gBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,gBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAzD;AAAA,EACA,UAAA0D;AAAA,EACA,WAAAzD,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMyD,IAAU9D,MAAS,SACnB+D,IAAcX,MAAW,aAEzB9C,IAAM;AAAA,IACV;AAAA,IACA,wBAAwBN,CAAI;AAAA,IAC5B8D,KAAW,gCAAgCX,CAAO;AAAA,IAClD,wBAAwBC,CAAM;AAAA,IAC9BhD;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAIX,SACE,gBAAAP,EAAC,OAAA,EAAI,WAAWS,GAAK,OAAAD,GAClB,UAAA;AAAA,IAAAgD,KACC,gBAAAxD,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACkE;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,aAAaP;AAAA,UACb,OAAOF;AAAA,UACP,UAAUC;AAAA,QAAA;AAAA,MAAA;AAAA,MAEXO,KACC,gBAAAjE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAASwD;AAAA,UACV,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GAEJ;AAAA,IAGDQ,KACC,gBAAAhE,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA,gBAAAA;AAAA,MAACmE;AAAA,MAAA;AAAA,QACC,SA3BqBP,KAAkBT;AAAA,QA4BvC,OAAOU;AAAA,QACP,UAAUC;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IAGF,gBAAA/D,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAA;AAAA,MAAAgE;AAAA,MACA1D,GAAU,IAAI,CAAC+D,GAASxD,MACvB,gBAAAb,EAAC,WAAA,EAAkB,WAAU,gCAC1B,UAAA;AAAA,QAAAqE,EAAQ,WAAW,UAClB,gBAAApE,EAAC,SAAI,WAAU,uCACZ,YAAQ,OAAA,CACX;AAAA,QAEDoE,EAAQ;AAAA,MAAA,EAAA,GANGxD,CAOd,CACD;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEAwC,EAAe,cAAc;AC5GtB,MAAMiB,IAAkE,CAAC;AAAA,EAC9E,MAAAnE,IAAO;AAAA,EACP,QAAAoD,IAAS;AAAA,EACT,QAAAgB;AAAA,EACA,WAAAf,IAAY;AAAA,EACZ,aAAAE;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,gBAAAH;AAAA,EACA,UAAAO;AAAA,EACA,WAAAzD,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAM0D,IAAcX,MAAW,aAEzB9C,IAAM;AAAA,IACV;AAAA,IACA,kCAAkCN,CAAI;AAAA,IACtC,kCAAkCoD,CAAM;AAAA,IACxChD;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAP,EAAC,OAAA,EAAI,WAAWS,GAAK,OAAAD,GAClB,UAAA;AAAA,IAAAgD,KACC,gBAAAxD,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACkE;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,aAAaP;AAAA,UACb,OAAOF;AAAA,UACP,UAAUC;AAAA,QAAA;AAAA,MAAA;AAAA,MAEXO,KACC,gBAAAjE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAASwD;AAAA,UACV,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GAEJ;AAAA,IAGDc,MAAW,UACV,gBAAAtE,EAAC,OAAA,EAAI,WAAU,yCAAyC,UAAAsE,GAAO;AAAA,IAGjE,gBAAAtE,EAAC,OAAA,EAAI,WAAU,uCAAuC,UAAA+D,EAAA,CAAS;AAAA,EAAA,GACjE;AAEJ;AAEAM,EAAwB,cAAc;AClE/B,MAAME,IAAsD,CAAC;AAAA,EAClE,MAAArE,IAAO;AAAA,EACP,QAAAoD,IAAS;AAAA,EACT,UAAAS;AAAA,EACA,UAAAS;AAAA,EACA,WAAAlE,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM;AAAA,IACV;AAAA,IACA,4BAA4BN,CAAI;AAAA,IAChC,4BAA4BoD,CAAM;AAAA,IAClChD;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAP,EAAC,OAAA,EAAI,WAAWS,GAAK,OAAAD,GACnB,UAAA;AAAA,IAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,iCAAiC,UAAA+D,EAAA,CAAS;AAAA,IACxDS,MAAa,UACZ,gBAAAxE,EAAC,OAAA,EAAI,WAAU,sCAAsC,UAAAwE,EAAA,CAAS;AAAA,EAAA,GAElE;AAEJ;AAEAD,EAAkB,cAAc;ACVzB,MAAME,IAA8C,CAAC;AAAA,EAC1D,MAAAlD;AAAA,EACA,aAAAE;AAAA,EACA,UAAAsC;AAAA,EACA,UAAAW;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,QAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,eAAA9C,IAAgB;AAAA,EAChB,WAAA1B,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM,CAAC,sBAAsBF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEtE,SACE,gBAAAP,EAAC,OAAA,EAAI,WAAWS,GAAK,OAAAD,GAClB,UAAA;AAAA,IAAAgB,KAAQA,EAAK,SAAS,KACrB,gBAAAvB,EAAC,OAAA,EAAI,WAAU,+BAA8B,MAAK,WAC/C,UAAAuB,EAAK,IAAI,CAACc,MACT,gBAAArC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,MAAK;AAAA,QACL,iBAAeqC,EAAI;AAAA,QACnB,WAAW;AAAA,UACT;AAAA,UACAA,EAAI,UAAU;AAAA,QAAA,EAEb,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,SAAS,MAAMZ,IAAcY,EAAI,GAAG;AAAA,QAEnC,UAAAA,EAAI;AAAA,MAAA;AAAA,MAZAA,EAAI;AAAA,IAAA,CAcZ,GACH;AAAA,IAGF,gBAAArC,EAAC,OAAA,EAAI,WAAU,+BAA+B,UAAA+D,EAAA,CAAS;AAAA,IAEvD,gBAAAhE,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS0E;AAAA,UACT,cAAW;AAAA,UAEV,UAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,gBAAA3E;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS6E;AAAA,UACT,UAAUC;AAAA,UAET,UAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF;AAAA,IAEC5C,KAAiB,gBAAAhC,EAAC,OAAA,EAAI,WAAU,qCAAA,CAAqC;AAAA,EAAA,GACxE;AAEJ;AAEAyE,EAAc,cAAc;AC3FrB,MAAMM,IAA4C,CAAC;AAAA,EACxD,MAAA7E,IAAO;AAAA,EACP,UAAA6D;AAAA,EACA,WAAAzD,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM;AAAA,IACV;AAAA,IACA,sBAAsBN,CAAI;AAAA,IAC1BI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAN,EAAC,OAAA,EAAI,WAAWQ,GAAK,OAAAD,GAClB,UAAAwD,GACH;AAEJ;AAEAgB,EAAa,cAAc;ACbpB,MAAMC,IAA4C,CAAC;AAAA,EACxD,MAAA9E,IAAO;AAAA,EACP,OAAA+E,IAAQ;AAAA,EACR,UAAAlB;AAAA,EACA,OAAAmB;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAA9E,IAAY;AAAA,EACZ,OAAAC;AACF,MAAM;AACJ,QAAMC,IAAM;AAAA,IACV;AAAA,IACA,sBAAsBN,CAAI;AAAA,IAC1B+E,MAAU,aAAa;AAAA,IACvB3E;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,UAAA,EAAO,MAAK,UAAS,WAAWE,GAAK,OAAAD,GAAc,SAAA6E,GAClD,UAAA;AAAA,IAAA,gBAAApF,EAAC,QAAA,EAAK,WAAU,2BAA2B,UAAA+D,EAAA,CAAS;AAAA,IACnD7D,MAAS,eAAeiF,MAAc,4BACpC,QAAA,EAAK,WAAU,gCAAgC,UAAAA,EAAA,CAAU;AAAA,IAE3DjF,MAAS,cAAcgF,MAAU,4BAC/B,QAAA,EAAK,WAAU,4BAA4B,UAAAA,EAAA,CAAM;AAAA,EAAA,GAEtD;AAEJ;AAEAF,EAAa,cAAc;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
1
|
import { BaseProps } from '@wecom-design/mobile';
|
|
3
2
|
|
|
4
3
|
export interface ShutterProps extends BaseProps {
|
|
5
4
|
}
|
|
6
|
-
export declare const Shutter:
|
|
5
|
+
export declare const Shutter: import('react').ForwardRefExoticComponent<ShutterProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
7
6
|
//# sourceMappingURL=Shutter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shutter.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Camera/Shutter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Shutter.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Camera/Shutter.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,eAAe,CAAC;AAEvB,MAAM,WAAW,YAAa,SAAQ,SAAS;CAAG;AAElD,eAAO,MAAM,OAAO,yGAKnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wecom-design/foundation-mobile",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "企业微信基础移动端组件库(06-foundation-mobile-library)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.mjs",
|