ksk-design-system 2.6.2 → 2.6.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.
@@ -75,9 +75,11 @@ interface FilterPillProps {
75
75
  * タップ領域は sm でも 32px 高 + 44px 幅相当の padding を確保する。
76
76
  *
77
77
  * @example
78
+ * ```tsx
78
79
  * <FilterPill label="エリア" value={area ?? undefined} onClear={() => setArea(null)}>
79
80
  * <CheckboxGroup ... />
80
81
  * </FilterPill>
82
+ * ```
81
83
  */
82
84
  declare function FilterPill({ label, value, onClear, clearLabel, children, open, onOpenChange, defaultOpen, panelLabel, align, contentClassName, icon, size, disabled, className, }: FilterPillProps): React.JSX.Element;
83
85
  export { FilterPill };
@@ -9,6 +9,7 @@ interface SettingsSectionProps extends Omit<React.ComponentProps<"section">, "ti
9
9
  interface SettingsListRowProps extends Omit<React.ComponentProps<"div">, "title" | "onClick"> {
10
10
  title: React.ReactNode;
11
11
  description?: React.ReactNode;
12
+ /** 行頭のアイコンやアバター。寸法は渡した要素を保ち、装飾用の余白を追加しない。 */
12
13
  leading?: React.ReactNode;
13
14
  rightSlot?: React.ReactNode;
14
15
  interactive?: boolean;
@@ -25,10 +25,20 @@ export type ListItemAlign = "start" | "center";
25
25
  * 確認すること。
26
26
  */
27
27
  export type ListItemDensity = "comfortable" | "compact";
28
+ export type ListItemTone = "default" | "accent" | "caution";
29
+ export type ListItemDivider = "none" | "inset" | "full";
28
30
  export interface ListItemProps extends AccessibilityProps {
29
31
  leading?: React.ReactNode;
32
+ /** 文字列にはDSタイポを適用。ReactNodeはレイアウト互換のためそのまま描画する。 */
30
33
  title: React.ReactNode;
34
+ /** 文字列にはDSタイポを適用。ReactNodeのスタイルは呼び出し側が管理する。 */
31
35
  description?: React.ReactNode;
36
+ /** 文字列の見出しの色。ReactNodeには適用しない。 */
37
+ titleTone?: ListItemTone;
38
+ /** 文字列の説明の色。ReactNodeには適用しない。 */
39
+ descriptionTone?: ListItemTone;
40
+ /** 下端の区切り線。insetは左右の行余白に追随(leadingの幅は含まない)。既定none。 */
41
+ divider?: ListItemDivider;
32
42
  trailing?: React.ReactNode;
33
43
  /**
34
44
  * title / description と同じ列に置く下段スロットではなく、
@@ -42,4 +52,4 @@ export interface ListItemProps extends AccessibilityProps {
42
52
  align?: ListItemAlign;
43
53
  density?: ListItemDensity;
44
54
  }
45
- export declare function ListItem({ leading, title, description, trailing, footerSlot, showChevron, onPress, disabled, align, density, accessibilityLabel, accessibilityHint, accessibilityRole, accessibilityState, ...accessibilityProps }: ListItemProps): React.JSX.Element;
55
+ export declare function ListItem({ leading, title, titleTone, descriptionTone, divider, description, trailing, footerSlot, showChevron, onPress, disabled, align, density, accessibilityLabel, accessibilityHint, accessibilityRole, accessibilityState, ...accessibilityProps }: ListItemProps): React.JSX.Element;
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { type AccessibilityProps } from "react-native";
3
+ export interface RadioProps extends AccessibilityProps {
4
+ selected?: boolean;
5
+ /** ラジオは再押下で解除しない。親で単一選択の値を管理する。 */
6
+ onChange?: (selected: boolean) => void;
7
+ disabled?: boolean;
8
+ /** 丸印の直径。操作領域は最低44ptを確保する。 */
9
+ size?: number;
10
+ /** 親の radio に意味と操作を委ねる装飾。読み上げ・フォーカス・押下を持たない。 */
11
+ decorative?: boolean;
12
+ }
13
+ export declare function Radio({ selected, onChange, disabled, size, decorative, accessibilityRole, accessibilityState, ...accessibilityProps }: RadioProps): React.JSX.Element;
@@ -35,6 +35,7 @@ export { Checkbox, type CheckboxProps } from "./Checkbox";
35
35
  export { CheckboxField, type CheckboxFieldProps } from "./CheckboxField";
36
36
  export { CheckboxCard, type CheckboxCardProps } from "./CheckboxCard";
37
37
  export { CheckboxGroup, type CheckboxGroupProps, type CheckboxGroupOption } from "./CheckboxGroup";
38
+ export { Radio, type RadioProps } from "./Radio";
38
39
  export { RadioGroup, type RadioGroupProps, type RadioOption } from "./RadioGroup";
39
40
  export { Slider, type SliderProps } from "./Slider";
40
41
  export { NumberInput, type NumberInputProps } from "./NumberInput";
@@ -87,7 +88,7 @@ export { StatusActionBadge, SyncStatusButton, type StatusActionBadgeProps, type
87
88
  export { Banner, type BannerProps } from "./Banner";
88
89
  export { BannerCarousel, type BannerCarouselProps } from "./BannerCarousel";
89
90
  export { SearchBar, type SearchBarProps } from "./SearchBar";
90
- export { ListItem, type ListItemProps, type ListItemAlign, type ListItemDensity, } from "./ListItem";
91
+ export { ListItem, type ListItemProps, type ListItemAlign, type ListItemTone, type ListItemDivider, type ListItemDensity, } from "./ListItem";
91
92
  export { SettingsListRow, SettingsSection, type SettingsListRowProps, type SettingsSectionProps, type SettingsSectionVariant, } from "./SettingsSection";
92
93
  export { EmptyState, type EmptyStateProps } from "./EmptyState";
93
94
  export { ErrorState, type ErrorStateProps } from "./ErrorState";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ksk-design-system",
3
- "version": "2.6.2",
3
+ "version": "2.6.3",
4
4
  "type": "module",
5
5
  "description": "KSK Design System — フリーランス向けマルチテーマ対応デザインシステム",
6
6
  "license": "MIT",
@@ -145,7 +145,7 @@
145
145
  | PhotoHero | `@/components/patterns/photo-hero` | — | BottomAligned, CenterAligned, NoOverlay |
146
146
  | PresenceIndicator | `@/components/patterns/presence-indicator` | — | Default, WithBadge, Offline, NameOnly, 狭幅で非表示にする例(className) |
147
147
  | ProgressSteps | `@/components/patterns/progress-steps` | — | Step2Active, FirstStep, ThirdStep, AllComplete, ThreeSteps |
148
- | AUTO_PROMPT_SUPPRESSION_EVENT, AutoPrompt, PromptCoordinatorProvider | `@/components/patterns/prompt-coordinator` | — | Default |
148
+ | AUTO_PROMPT_SUPPRESSION_EVENT, AutoPrompt, PromptCoordinatorProvider | `@/components/patterns/prompt-coordinator` | — | Default, 予約した案内を順番に表示する |
149
149
  | Prose | `@/components/patterns/prose` | — | PrivacyPolicy, SingleSection |
150
150
  | ActionTile, QuickActionGrid | `@/components/patterns/quick-action-grid` | — | EmojiOnly, IconAndLabel, WithMeta, IndicatorOverride, SelectedWithoutDescription, NarrowWithLongMeta, SingleSelection, MultipleSelection, LaunchersWithoutSelectionMode |
151
151
  | ResponsiveOverlayFrame, ResponsiveOverlayFooter | `@/components/patterns/responsive-overlay-frame` | — | Short form (mobile-form), Long keyboard-aware form (mobile-page), mobile-full preset, breakpoint=lg, breakpoint=product-theme, snapPoints は dialog に変換されない, float サイド(カード型), float-glass サイド(ガラス素材), plain preset(素の bottom シート) |
@@ -4,7 +4,7 @@
4
4
 
5
5
  React Native / Expo consumer は、新規 UI を作る前にこの一覧で既存コンポーネントを確認してください。すべて `ksk-design-system/native/ui` から import します。
6
6
 
7
- - Public native component exports: 151
7
+ - Public native component exports: 152
8
8
  - Import: `import { Button, Screen } from "ksk-design-system/native/ui"`
9
9
 
10
10
  | Component | Source | Section |
@@ -50,6 +50,7 @@ React Native / Expo consumer は、新規 UI を作る前にこの一覧で既
50
50
  | `Input` | `src/native/components/Input.tsx` | Phase 2: Basic Form |
51
51
  | `Label` | `src/native/components/Label.tsx` | Phase 2: Basic Form |
52
52
  | `NumberInput` | `src/native/components/NumberInput.tsx` | Phase 2: Basic Form |
53
+ | `Radio` | `src/native/components/Radio.tsx` | Phase 2: Basic Form |
53
54
  | `RadioGroup` | `src/native/components/RadioGroup.tsx` | Phase 2: Basic Form |
54
55
  | `Slider` | `src/native/components/Slider.tsx` | Phase 2: Basic Form |
55
56
  | `Switch` | `src/native/components/Switch.tsx` | Phase 2: Basic Form |
@@ -484,16 +484,12 @@
484
484
  -webkit-mask-composite: xor;
485
485
  mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
486
486
  mask-composite: exclude;
487
- /* ⚠️ backdrop-filter はここには書かない。下の Chromium 専用 @supports ゲート内
488
- でのみ適用する。理由(回帰: yokoku-app Safari で Liquid Glass シート内の
489
- ボタン文字が全部ぼやける、2026-07):
490
- この ::after は z-index:2 でコンテンツ(z1)より上にあり、backdrop-filter は
491
- 「背後に描画済みの兄弟=シート本文」をぼかす。Blink は mask(exclude) で
492
- backdrop-filter の適用域も 1px リングに限定するが、WebKit は mask で
493
- backdrop-filter のサンプリング域をクリップしないため、blur(4px) がシート
494
- 全面に乗り前景テキストを潰す。conic リム(背景)自体は WebKit でも mask で
495
- 正しく 1px に切り取られるので、非 Chromium では「リムだけ・blur なし」に
496
- 安全劣化させる(作者の当初意図どおり)。 */
487
+ /* ⚠️ 前景より上の装飾には、ブラウザーを問わず backdrop-filter を追加しない。
488
+ この ::after は z-index:2 でコンテンツ(z1)より上にあるため、ぼかす対象に
489
+ シート本文も含まれる。mask(exclude) で適用域が縁だけに制限される前提は
490
+ 描画環境に依存し、文字やボタン全体をぼかす原因になる。
491
+ 縁の光は conic リムとマスクだけで描き、背景のぼかし・屈折は本文より下の
492
+ 素材クラス(.glass 等)の backdrop-filter に任せる。 */
497
493
  pointer-events: none;
498
494
  z-index: 2;
499
495
  }
@@ -605,20 +601,6 @@
605
601
  * 屈折を足すとかえって主張が強くなり「薄さ」の意図を壊すため対象外。
606
602
  */
607
603
  @supports (-webkit-app-region: none) {
608
- /* .glass-specular リムの progressive blur は Chromium 限定。
609
- WebKit では mask が backdrop-filter の適用域をクリップせずシート全面が
610
- ぼやけて前景テキストを潰すため(上の ::after のコメント参照)、この
611
- 増光ブラーはここでのみ供給し、非対応環境は conic リムのみに劣化させる。 */
612
- .glass-specular::after {
613
- -webkit-backdrop-filter: blur(4px) saturate(1.8) brightness(1.35);
614
- backdrop-filter: blur(4px) saturate(1.8) brightness(1.35);
615
- }
616
- .dark .glass-specular::after,
617
- [data-glass-backdrop="dark"] .glass-specular::after {
618
- -webkit-backdrop-filter: blur(4px) saturate(1.6) brightness(1.25);
619
- backdrop-filter: blur(4px) saturate(1.6) brightness(1.25);
620
- }
621
-
622
604
  .glass {
623
605
  -webkit-backdrop-filter: var(--glass-blur) var(--glass-refract);
624
606
  backdrop-filter: var(--glass-blur) var(--glass-refract);
@@ -73,7 +73,9 @@
73
73
  @source inline("[--ksk-fab-bottom-offset:5rem]");
74
74
  @source inline("[--ksk-fab-bottom-offset:6rem]");
75
75
  @source inline("[-webkit-tap-highlight-color:transparent]");
76
+ @source inline("[@media(any-pointer:coarse)]:min-w-11");
76
77
  @source inline("[@media(hover:hover)]:transition-colors");
78
+ @source inline("[@media(hover:hover)_and_(pointer:fine)]:w-8");
77
79
  @source inline("[scrollbar-width:none]");
78
80
  @source inline("absolute");
79
81
  @source inline("active:bg-[var(--Active-Destructive-Button)]");