@handijit/ui 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +485 -571
- package/build/base.css +1 -1
- package/build/charts.cjs +1 -1
- package/build/charts.cjs.map +1 -1
- package/build/charts.css +1 -1
- package/build/charts.js +350 -349
- package/build/charts.js.map +1 -1
- package/build/chat.cjs +3 -3
- package/build/chat.cjs.map +1 -1
- package/build/chat.css +1 -1
- package/build/chat.js +344 -343
- package/build/chat.js.map +1 -1
- package/build/components/Accordion/style.css +1 -1
- package/build/components/Alert/style.css +1 -1
- package/build/components/Avatar/style.css +1 -1
- package/build/components/Badge/index.cjs +1 -1
- package/build/components/Badge/index.cjs.map +1 -1
- package/build/components/Badge/index.d.ts +8 -13
- package/build/components/Badge/index.js +1 -1
- package/build/components/Badge/index.js.map +1 -1
- package/build/components/Badge/style.css +1 -1
- package/build/components/BottomSheet/style.css +1 -1
- package/build/components/Breadcrumb/style.css +1 -1
- package/build/components/Button/index.cjs +1 -1
- package/build/components/Button/index.cjs.map +1 -1
- package/build/components/Button/index.js +2 -2
- package/build/components/Button/index.js.map +1 -1
- package/build/components/Button/style.css +1 -1
- package/build/components/Card/style.css +1 -1
- package/build/components/Carousel/style.css +1 -1
- package/build/components/Checkbox/style.css +1 -1
- package/build/components/Chip/style.css +1 -1
- package/build/components/ChipGroup/style.css +1 -1
- package/build/components/CodeBadge/style.css +1 -1
- package/build/components/Combobox/index.cjs +1 -1
- package/build/components/Combobox/index.cjs.map +1 -1
- package/build/components/Combobox/index.js +51 -51
- package/build/components/Combobox/index.js.map +1 -1
- package/build/components/Combobox/style.css +1 -1
- package/build/components/CommandPalette/style.css +1 -1
- package/build/components/CopyField/style.css +1 -1
- package/build/components/DataTable/style.css +1 -1
- package/build/components/DateField/index.d.ts +1 -1
- package/build/components/DateField/style.css +1 -1
- package/build/components/Directory/style.css +1 -1
- package/build/components/Disclosure/style.css +1 -1
- package/build/components/Divider/style.css +1 -1
- package/build/components/Drawer/style.css +1 -1
- package/build/components/EmptyState/style.css +1 -1
- package/build/components/Field/style.css +1 -1
- package/build/components/FileUpload/style.css +1 -1
- package/build/components/FilterBar/style.css +1 -1
- package/build/components/IconButton/index.cjs +1 -1
- package/build/components/IconButton/index.cjs.map +1 -1
- package/build/components/IconButton/index.d.ts +2 -2
- package/build/components/IconButton/index.js +1 -1
- package/build/components/IconButton/index.js.map +1 -1
- package/build/components/IconButton/style.css +1 -1
- package/build/components/Input/index.d.ts +1 -1
- package/build/components/Input/style.css +1 -1
- package/build/components/Kbd/style.css +1 -1
- package/build/components/Menu/style.css +1 -1
- package/build/components/Modal/style.css +1 -1
- package/build/components/PageHeader/style.css +1 -1
- package/build/components/Pagination/style.css +1 -1
- package/build/components/Panel/style.css +1 -1
- package/build/components/PasswordInput/style.css +1 -1
- package/build/components/Popover/style.css +1 -1
- package/build/components/Price/style.css +1 -1
- package/build/components/Progress/style.css +1 -1
- package/build/components/PromptDialog/style.css +1 -1
- package/build/components/QuantityStepper/style.css +1 -1
- package/build/components/Radio/style.css +1 -1
- package/build/components/RadioCard/style.css +1 -1
- package/build/components/RangeSlider/style.css +1 -1
- package/build/components/Rating/style.css +1 -1
- package/build/components/RatingInput/style.css +1 -1
- package/build/components/ScrollArea/style.css +1 -1
- package/build/components/SectionHeader/style.css +1 -1
- package/build/components/SegmentedControl/style.css +1 -1
- package/build/components/Select/index.cjs +1 -1
- package/build/components/Select/index.cjs.map +1 -1
- package/build/components/Select/index.js +28 -28
- package/build/components/Select/index.js.map +1 -1
- package/build/components/Select/style.css +1 -1
- package/build/components/Skeleton/style.css +1 -1
- package/build/components/Spinner/style.css +1 -1
- package/build/components/Stat/style.css +1 -1
- package/build/components/StatusDot/style.css +1 -1
- package/build/components/Steps/style.css +1 -1
- package/build/components/SummaryCard/style.css +1 -1
- package/build/components/Switch/index.d.ts +1 -1
- package/build/components/Switch/style.css +1 -1
- package/build/components/Table/style.css +1 -1
- package/build/components/TableCheckbox/style.css +1 -1
- package/build/components/Tabs/style.css +1 -1
- package/build/components/TagInput/style.css +1 -1
- package/build/components/TextLink/style.css +1 -1
- package/build/components/Textarea/style.css +1 -1
- package/build/components/Tile/style.css +1 -1
- package/build/components/Timeline/style.css +1 -1
- package/build/components/Toast/style.css +1 -1
- package/build/components/Tooltip/style.css +1 -1
- package/build/constants/breakpoint.constants.cjs +1 -1
- package/build/constants/breakpoint.constants.cjs.map +1 -1
- package/build/constants/breakpoint.constants.d.ts +13 -8
- package/build/constants/breakpoint.constants.js +7 -5
- package/build/constants/breakpoint.constants.js.map +1 -1
- package/build/enums/ui-size.enum.cjs.map +1 -1
- package/build/enums/ui-size.enum.d.ts +5 -2
- package/build/enums/ui-size.enum.js.map +1 -1
- package/build/enums/ui-variant.enum.cjs +1 -1
- package/build/enums/ui-variant.enum.cjs.map +1 -1
- package/build/enums/ui-variant.enum.d.ts +13 -13
- package/build/enums/ui-variant.enum.js +1 -1
- package/build/enums/ui-variant.enum.js.map +1 -1
- package/build/helpers/theme.helper.cjs +1 -23
- package/build/helpers/theme.helper.cjs.map +1 -1
- package/build/helpers/theme.helper.d.ts +13 -44
- package/build/helpers/theme.helper.js +31 -69
- package/build/helpers/theme.helper.js.map +1 -1
- package/build/hooks/useUiTheme.cjs +1 -1
- package/build/hooks/useUiTheme.cjs.map +1 -1
- package/build/hooks/useUiTheme.d.ts +4 -1
- package/build/hooks/useUiTheme.js +34 -28
- package/build/hooks/useUiTheme.js.map +1 -1
- package/build/hooks/useUiTokens.cjs +1 -1
- package/build/hooks/useUiTokens.cjs.map +1 -1
- package/build/hooks/useUiTokens.d.ts +8 -8
- package/build/hooks/useUiTokens.js +24 -27
- package/build/hooks/useUiTokens.js.map +1 -1
- package/build/index.cjs +1 -1
- package/build/index.d.ts +3 -5
- package/build/index.js +194 -202
- package/build/index.js.map +1 -1
- package/build/scss/_index.scss +4 -3
- package/build/scss/_mixins.scss +264 -146
- package/build/scss/_variables.scss +216 -24
- package/build/styles.css +67 -67
- package/build/theme/UiProvider.cjs +1 -1
- package/build/theme/UiProvider.cjs.map +1 -1
- package/build/theme/UiProvider.d.ts +10 -9
- package/build/theme/UiProvider.js +7 -25
- package/build/theme/UiProvider.js.map +1 -1
- package/build/theme/UiThemeScript.cjs +1 -1
- package/build/theme/UiThemeScript.cjs.map +1 -1
- package/build/theme/UiThemeScript.d.ts +13 -10
- package/build/theme/UiThemeScript.js +2 -2
- package/build/theme/UiThemeScript.js.map +1 -1
- package/build/theme/context.js +2 -2
- package/build/types/charts/core/palette.d.ts +6 -8
- package/build/types/chat/Legend/index.d.ts +3 -2
- package/build/types/theme.type.d.ts +6 -48
- package/build/types/types/theme.type.d.ts +6 -48
- package/package.json +10 -10
- package/build/scss/_colors.generated.scss +0 -119
- package/build/scss/_metrics.generated.scss +0 -49
- package/build/theme/initUi.cjs +0 -2
- package/build/theme/initUi.cjs.map +0 -1
- package/build/theme/initUi.d.ts +0 -7
- package/build/theme/initUi.js +0 -10
- package/build/theme/initUi.js.map +0 -1
- package/build/theme/palette.cjs +0 -2
- package/build/theme/palette.cjs.map +0 -1
- package/build/theme/palette.d.ts +0 -219
- package/build/theme/palette.js +0 -148
- package/build/theme/palette.js.map +0 -1
- package/build/theme/tokens.cjs +0 -2
- package/build/theme/tokens.cjs.map +0 -1
- package/build/theme/tokens.d.ts +0 -225
- package/build/theme/tokens.js +0 -384
- package/build/theme/tokens.js.map +0 -1
- package/build/types/theme/palette.d.ts +0 -219
- package/build/types/theme/tokens.d.ts +0 -225
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-radioCard-sndiC{display:flex;align-items:center;gap:var(--
|
|
1
|
+
@layer ui{.ui-radioCard-sndiC{display:flex;align-items:center;gap:var(--hd-space-3);min-height:44px;padding:var(--hd-space-3) var(--hd-space-4);background-color:var(--hd-bg-surface);border:1px solid var(--ui-radio-card-line, var(--hd-border));border-radius:var(--ui-radio-card-radius, var(--hd-radius-sm));cursor:pointer;transition:border-color var(--hd-duration-fast) var(--hd-ease-standard),background-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-radioCard-sndiC:hover{border-color:var(--hd-border-strong)}.ui-radioCard-sndiC:has(.ui-radioCard__input-6vuoD:focus-visible){outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, 2px)}.ui-radioCard--selected-Mi7ee{border-color:var(--hd-primary-line);background-color:var(--hd-primary-soft);box-shadow:inset 0 0 0 1px var(--hd-primary-line)}.ui-radioCard--selected-Mi7ee:hover,.ui-radioCard--selected-Mi7ee .ui-radioCard__indicator--x9LT{border-color:var(--hd-primary)}.ui-radioCard--selected-Mi7ee .ui-radioCard__indicator--x9LT:after{background-color:var(--hd-primary)}.ui-radioCard--disabled-YlYee{background-color:var(--hd-bg-raised);border-color:var(--hd-border);cursor:not-allowed;color:var(--hd-text-3)}@media (forced-colors: active){.ui-radioCard--disabled-YlYee{color:GrayText;border-color:GrayText}}.ui-radioCard--disabled-YlYee{box-shadow:none}.ui-radioCard--disabled-YlYee:hover{border-color:var(--hd-border)}.ui-radioCard--disabled-YlYee .ui-radioCard__indicator--x9LT{background-color:var(--hd-bg-raised);border-color:var(--hd-border)}.ui-radioCard--disabled-YlYee.ui-radioCard--selected-Mi7ee .ui-radioCard__indicator--x9LT{border-color:var(--hd-text-3)}.ui-radioCard--disabled-YlYee.ui-radioCard--selected-Mi7ee .ui-radioCard__indicator--x9LT:after{background-color:var(--hd-text-3)}.ui-radioCard__input-6vuoD{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-radioCard__indicator--x9LT{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;background-color:var(--hd-bg-surface);border:1px solid var(--hd-border-strong);border-radius:var(--hd-radius-pill);transition:border-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-radioCard__indicator--x9LT:after{content:"";width:8px;height:8px;border-radius:var(--hd-radius-pill);background-color:transparent;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-radioCard__body-CFqoi{display:flex;align-items:center;justify-content:space-between;gap:var(--hd-space-3);flex:1;min-width:0}@media (prefers-reduced-motion: reduce){.ui-radioCard-sndiC{transition:none}.ui-radioCard-sndiC .ui-radioCard__indicator--x9LT,.ui-radioCard-sndiC .ui-radioCard__indicator--x9LT:after{transition:none}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-range-RpDPh{display:flex;flex-direction:column;gap:var(--
|
|
1
|
+
@layer ui{.ui-range-RpDPh{display:flex;flex-direction:column;gap:var(--hd-space-2)}.ui-range--disabled-13hlc{pointer-events:none}.ui-range--disabled-13hlc .ui-range__readout-itDMd{color:var(--hd-text-3)}@media (forced-colors: active){.ui-range--disabled-13hlc .ui-range__readout-itDMd{color:GrayText}}.ui-range--disabled-13hlc .ui-range__fill-VXMCE{background-color:var(--hd-bg-disabled)}.ui-range--disabled-13hlc .ui-range__input-TAN2I::-webkit-slider-thumb{background-color:var(--hd-bg-raised);border-color:var(--hd-bg-disabled);box-shadow:none}.ui-range--disabled-13hlc .ui-range__input-TAN2I::-moz-range-thumb{background-color:var(--hd-bg-raised);border-color:var(--hd-bg-disabled);box-shadow:none}.ui-range__readout-itDMd{display:flex;align-items:center;gap:var(--hd-space-2);justify-content:center;font-family:var(--hd-font-display);font-size:var(--hd-type-small-size);font-weight:var(--hd-font-weight-semibold);color:var(--hd-text);font-variant-numeric:tabular-nums}.ui-range__separator-u-ZJX{color:var(--hd-text-3);font-weight:var(--hd-font-weight-regular)}.ui-range__track-bCh5Y{position:relative;height:32px;display:flex;align-items:center}.ui-range__track-bCh5Y:before{content:"";position:absolute;inset-inline:0;height:4px;border-radius:var(--hd-radius-pill);background-color:var(--hd-border-strong)}.ui-range__fill-VXMCE{position:absolute;height:4px;border-radius:var(--hd-radius-pill);background-color:var(--hd-primary)}.ui-range__input-TAN2I{position:absolute;inset-inline-start:0;width:100%;height:32px;margin:0;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:none}.ui-range__input-TAN2I::-webkit-slider-runnable-track{height:4px;background:transparent}.ui-range__input-TAN2I::-moz-range-track{height:4px;background:transparent}.ui-range__input-TAN2I::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:auto;width:20px;height:20px;margin-top:-8px;border-radius:var(--hd-radius-pill);background-color:var(--hd-bg-surface);border:2px solid var(--hd-primary);box-shadow:var(--hd-shadow-1);cursor:grab;transition:transform var(--hd-duration-fast) var(--hd-ease-standard),box-shadow var(--hd-duration-fast) var(--hd-ease-standard)}.ui-range__input-TAN2I::-moz-range-thumb{pointer-events:auto;width:20px;height:20px;border-radius:var(--hd-radius-pill);background-color:var(--hd-bg-surface);border:2px solid var(--hd-primary);box-shadow:var(--hd-shadow-1);cursor:grab;transition:transform var(--hd-duration-fast) var(--hd-ease-standard),box-shadow var(--hd-duration-fast) var(--hd-ease-standard)}.ui-range__input-TAN2I:hover::-webkit-slider-thumb{transform:scale(1.1)}.ui-range__input-TAN2I:hover::-moz-range-thumb{transform:scale(1.1)}.ui-range__input-TAN2I:active::-webkit-slider-thumb{cursor:grabbing;box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent)}.ui-range__input-TAN2I:active::-moz-range-thumb{cursor:grabbing;box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent)}.ui-range__input-TAN2I:focus{outline:none}.ui-range__input-TAN2I:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent);border-color:var(--hd-primary-active)}.ui-range__input-TAN2I:focus-visible::-moz-range-thumb{box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent);border-color:var(--hd-primary-active)}@media (prefers-reduced-motion: reduce){.ui-range__input-TAN2I::-webkit-slider-thumb,.ui-range__input-TAN2I::-moz-range-thumb{transition:none}}.ui-range__bounds-GIhFd{display:flex;align-items:center;gap:var(--hd-space-2);justify-content:space-between;font-size:var(--hd-type-caption-size);color:var(--hd-text-3);font-variant-numeric:tabular-nums}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-rating-94dke{display:inline-flex;align-items:center;gap:var(--
|
|
1
|
+
@layer ui{.ui-rating-94dke{display:inline-flex;align-items:center;gap:var(--hd-space-2)}.ui-rating__stars-QkpVU{display:inline-flex;gap:1px;color:var(--hd-warning-solid)}.ui-rating__empty-Wf6-K{color:var(--hd-border-strong)}.ui-rating__count-pIoEs{font-size:var(--hd-type-caption-size);color:var(--hd-text-2);font-variant-numeric:tabular-nums}.ui-rating__srOnly-E9h0d{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-rating--sm-AtY7U .ui-rating__stars-QkpVU{font-size:16px}.ui-rating--md-Q0nxN .ui-rating__stars-QkpVU{font-size:18px}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-rating-neNnF{border:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--
|
|
1
|
+
@layer ui{.ui-rating-neNnF{border:none;padding:0;margin:0;display:flex;flex-direction:column;gap:var(--hd-space-2)}.ui-rating--disabled-ZKjHa .ui-rating__legend-uYvFS,.ui-rating--disabled-ZKjHa .ui-rating__caption-13KFX,.ui-rating--disabled-ZKjHa .ui-rating__star--filled-L3AkT{color:var(--hd-text-3)}@media (forced-colors: active){.ui-rating--disabled-ZKjHa .ui-rating__legend-uYvFS,.ui-rating--disabled-ZKjHa .ui-rating__caption-13KFX,.ui-rating--disabled-ZKjHa .ui-rating__star--filled-L3AkT{color:GrayText}}.ui-rating--disabled-ZKjHa .ui-rating__star-BANFJ{cursor:not-allowed}@media (forced-colors: active){.ui-rating--disabled-ZKjHa .ui-rating__star-BANFJ{color:GrayText}}.ui-rating--disabled-ZKjHa .ui-rating__star-BANFJ:hover{transform:none}.ui-rating__legend-uYvFS{padding:0;font-size:var(--hd-type-small-size);font-weight:var(--hd-font-weight-medium);color:var(--hd-text-2)}.ui-rating__stars-vJFLk{display:flex;gap:var(--hd-space-1)}.ui-rating__star-BANFJ{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;font-size:24px;color:var(--hd-border);cursor:pointer;transition:color var(--hd-duration-fast) var(--hd-ease-standard),transform var(--hd-duration-fast) var(--hd-ease-standard)}.ui-rating__star-BANFJ:hover{transform:scale(1.1)}.ui-rating__star--filled-L3AkT{color:var(--hd-warning-solid)}.ui-rating__star-BANFJ:focus-within{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, 2px);border-radius:var(--hd-radius-xs)}@media (prefers-reduced-motion: reduce){.ui-rating__star-BANFJ{transition:none}.ui-rating__star-BANFJ:hover{transform:none}}.ui-rating__input-s2iiO,.ui-rating__srOnly-iSCoz{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-rating__caption-13KFX{font-size:var(--hd-type-small-size);font-weight:var(--hd-font-weight-medium);color:var(--hd-text);min-height:1.4em}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-scrollArea-Ly-yT{scrollbar-width:thin;scrollbar-color:var(--
|
|
1
|
+
@layer ui{.ui-scrollArea-Ly-yT{scrollbar-width:thin;scrollbar-color:var(--hd-border-strong) transparent}.ui-scrollArea-Ly-yT::-webkit-scrollbar{width:8px;height:8px}.ui-scrollArea-Ly-yT::-webkit-scrollbar-track{background:transparent}.ui-scrollArea-Ly-yT::-webkit-scrollbar-thumb{background-color:var(--hd-border-strong);border-radius:var(--hd-radius-pill);border:2px solid transparent;background-clip:content-box}.ui-scrollArea-Ly-yT::-webkit-scrollbar-thumb:hover{background-color:var(--hd-text-3)}.ui-scrollArea-Ly-yT{position:relative;overscroll-behavior:contain}.ui-scrollArea--vertical-2ujC7{overflow-y:auto;overflow-x:hidden}.ui-scrollArea--horizontal-e9pu-{overflow-x:auto;overflow-y:hidden}.ui-scrollArea--both-lv-8W{overflow:auto}.ui-scrollArea-Ly-yT:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, -2px)}.ui-scrollArea--fade-01Bbm{--ui-scroll-fade-start: 0px;--ui-scroll-fade-end: 0px}.ui-scrollArea--fade-01Bbm[data-fade-start]{--ui-scroll-fade-start: var(--hd-space-4)}.ui-scrollArea--fade-01Bbm[data-fade-end]{--ui-scroll-fade-end: var(--hd-space-4)}.ui-scrollArea--fade-01Bbm.ui-scrollArea--vertical-2ujC7{-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--ui-scroll-fade-start),#000 calc(100% - var(--ui-scroll-fade-end)),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 var(--ui-scroll-fade-start),#000 calc(100% - var(--ui-scroll-fade-end)),transparent 100%)}.ui-scrollArea--fade-01Bbm.ui-scrollArea--horizontal-e9pu-{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--ui-scroll-fade-start),#000 calc(100% - var(--ui-scroll-fade-end)),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 var(--ui-scroll-fade-start),#000 calc(100% - var(--ui-scroll-fade-end)),transparent 100%)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-header-a08Jh{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--
|
|
1
|
+
@layer ui{.ui-header-a08Jh{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--hd-space-4);flex-wrap:wrap}.ui-header__text-ArJkA{display:flex;flex-direction:column;gap:var(--hd-space-1);min-width:0}.ui-header__overline-X5Epo{font-family:var(--hd-font-body);font-size:var(--hd-type-caption-size);font-weight:var(--hd-font-weight-semibold);letter-spacing:.045em;text-transform:uppercase;color:var(--hd-text-2)}.ui-header__title-nQQQJ{font-family:var(--hd-font-display);font-size:var(--hd-type-h3-size);font-weight:var(--hd-type-h3-weight);font-stretch:var(--hd-type-h3-stretch);line-height:var(--hd-type-h3-line-height);letter-spacing:var(--hd-type-h3-letter-spacing);color:var(--hd-text);margin:0}.ui-header__description-08oCr{font-size:var(--hd-type-small-size);color:var(--hd-text-2);line-height:var(--hd-type-body-line-height);max-width:68ch;margin:0}.ui-header__action-xsxQF{flex-shrink:0}.ui-header--sm-mIJWZ .ui-header__title-nQQQJ{font-size:var(--hd-type-h4-size)}.ui-header--lg-QBLIz .ui-header__title-nQQQJ{font-size:var(--hd-type-h2-size)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-segmented-qo2Bw{display:inline-flex;padding:3px;border-radius:var(--
|
|
1
|
+
@layer ui{.ui-segmented-qo2Bw{display:inline-flex;padding:3px;border-radius:var(--hd-radius-sm);background-color:var(--hd-bg-raised);border:1px solid var(--hd-border)}.ui-segmented--sm-7tUry{font-size:var(--hd-type-caption-size)}.ui-segmented--md-PiSqt{font-size:var(--hd-type-small-size)}.ui-segmented__item-mqRNZ{display:flex;align-items:center;gap:var(--hd-space-2);position:relative}.ui-segmented__item-mqRNZ:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-segmented__item-mqRNZ{justify-content:center;min-width:0;padding:var(--hd-space-2) var(--hd-space-3);border:none;border-radius:calc(var(--hd-radius-sm) - 3px);background:none;cursor:pointer;font-family:var(--hd-font-body);font-size:inherit;font-weight:var(--hd-font-weight-medium);color:var(--hd-text-2);white-space:nowrap;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard),color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-segmented--sm-7tUry .ui-segmented__item-mqRNZ{padding:var(--hd-space-1) var(--hd-space-2)}.ui-segmented__item-mqRNZ:hover:not(:disabled):not(.ui-segmented__item--selected-r7CLj){color:var(--hd-text)}.ui-segmented__item-mqRNZ:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, -1px)}.ui-segmented__item--selected-r7CLj{background-color:var(--hd-bg-surface);color:var(--hd-text);box-shadow:var(--hd-shadow-1)}.ui-segmented__item-mqRNZ:disabled{color:var(--hd-text-3);cursor:not-allowed}@media (prefers-reduced-motion: reduce){.ui-segmented__item-mqRNZ{transition:none}}.ui-segmented__icon-C9CT-{display:inline-flex;flex-shrink:0;font-size:16px}.ui-segmented__label-NVXBv{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),n=require("react"),X=require("react-dom"),
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),n=require("react"),X=require("react-dom"),O=require("react-bootstrap-icons"),Z=require("../../hooks/useListboxNavigation.cjs"),ee=require("../../hooks/usePortalSurface.cjs"),te=require("../../hooks/usePositioning.cjs"),re=require("../../constants/breakpoint.constants.cjs"),m=require("../../helpers/class-name.helper.cjs"),ne=require("../../helpers/label.helper.cjs"),ae=require("../../theme/context.cjs"),se=require("../BottomSheet/index.cjs"),t={default:{"select":"ui-select-tiiPL","trigger":"ui-trigger-rHQJz","trigger--empty":"ui-trigger--empty-cuinb","trigger--open":"ui-trigger--open-1nsvu","trigger--invalid":"ui-trigger--invalid-NtP0W","trigger--sm":"ui-trigger--sm-Xnu1C","trigger__icon":"ui-trigger__icon-apCcx","trigger__srName":"ui-trigger__srName-XLCxt","trigger__value":"ui-trigger__value-ioH7K","trigger__chevron":"ui-trigger__chevron-FtsIZ","trigger__chevron--open":"ui-trigger__chevron--open-1P2P-","panel":"ui-panel-rGOOd","list":"ui-list-SOKf8","list--sheet":"ui-list--sheet-BIjCb","option":"ui-option-ZDPef","option--active":"ui-option--active-R4lLF","option--selected":"ui-option--selected-glQMj","option--disabled":"ui-option--disabled-h4rdd","option__label":"ui-option__label-SsoYB","option__check":"ui-option__check-8CPSG"}},ie=({options:l,value:w,onChange:A,label:_,placeholder:K,closeLabel:T,icon:I,size:U="md",align:W="start",isDisabled:y,id:B,className:F,testId:H,required:Q,"aria-describedby":Y,"aria-invalid":E})=>{const{labels:d}=ae.useUi(),z=ne.resolveLabel("Select.placeholder",K,d==null?void 0:d.selectPlaceholder),G=n.useId(),o=B??G,R=`${o}-listbox`,j=e=>`${o}-option-${e}`,D=n.useRef(null),h=n.useRef(null),g=n.useRef(null),[s,$]=n.useState(null),q=te.default(h,g,{side:"bottom",align:W,isOpen:s==="popover"}),x=ee.default(s==="popover",h,g),i=s!==null,b=l.findIndex(e=>e.value===w),p=b>=0?l[b]:null,u=n.useCallback(()=>$(null),[]),C=n.useCallback(()=>{y||l.length===0||$(window.matchMedia(re.SHEET_MEDIA_QUERY).matches?"sheet":"popover")},[y,l.length]),k=e=>{e.isDisabled||(A(e.value),u())},L=n.useRef(!1);n.useEffect(()=>{var e;L.current&&!i&&((e=h.current)==null||e.focus()),L.current=i},[i]),n.useEffect(()=>{if(s!=="popover")return;const e=a=>{var f,S;const c=a.target;(f=D.current)!=null&&f.contains(c)||(S=g.current)!=null&&S.contains(c)||u()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[s,u]);const{activeIndex:v,setActiveIndex:J,listRef:N,handleKeyDown:V}=Z.default({count:l.length,isOpen:i,initialIndex:b>=0?b:0,onSelect:e=>{const a=l[e];a&&k(a)},onClose:u});n.useEffect(()=>{var e;s==="sheet"&&((e=N.current)==null||e.focus({preventScroll:!0}))},[s,N]);const M=e=>{if(!i){["ArrowDown","ArrowUp","Enter"," "].includes(e.key)&&(e.preventDefault(),C());return}V(e)},P=e=>r.jsx("ul",{ref:N,id:R,role:"listbox","aria-label":_,"aria-activedescendant":e&&l[v]?j(v):void 0,tabIndex:e?0:-1,className:m.cx(t.default.list,e&&t.default["list--sheet"]),onKeyDown:e?M:void 0,children:l.map((a,c)=>{const f=a.value===w;return r.jsxs("li",{id:j(c),role:"option","data-index":c,"aria-selected":f,"aria-disabled":a.isDisabled,className:m.cx(t.default.option,c===v&&t.default["option--active"],f&&t.default["option--selected"],a.isDisabled&&t.default["option--disabled"]),onMouseEnter:()=>J(c),onClick:()=>k(a),children:[r.jsx("span",{className:t.default.option__label,children:a.label}),f&&r.jsx(O.CheckLg,{"aria-hidden":!0,className:t.default.option__check})]},a.value)})});return r.jsxs("span",{ref:D,className:m.cx(t.default.select,F),"data-testid":H,children:[r.jsxs("button",{ref:h,id:o,type:"button",role:"combobox",className:m.cx(t.default.trigger,t.default[`trigger--${U}`],!p&&t.default["trigger--empty"],i&&t.default["trigger--open"],E&&t.default["trigger--invalid"]),disabled:y,"aria-haspopup":"listbox","aria-expanded":i,"aria-controls":i?R:void 0,"aria-activedescendant":s==="popover"&&l[v]?j(v):void 0,"aria-labelledby":p?`${o}-name ${o}-value`:`${o}-name`,"aria-describedby":Y,"aria-invalid":E,"aria-required":Q||void 0,onClick:()=>i?u():C(),onKeyDown:M,children:[I&&r.jsx("span",{className:t.default.trigger__icon,"aria-hidden":!0,children:I}),r.jsx("span",{id:`${o}-name`,className:t.default.trigger__srName,children:_}),r.jsx("span",{id:`${o}-value`,className:t.default.trigger__value,children:(p==null?void 0:p.label)??z}),r.jsx(O.CaretDownFill,{"aria-hidden":!0,className:m.cx(t.default.trigger__chevron,i&&t.default["trigger__chevron--open"])})]}),s==="popover"&&x.container&&X.createPortal(r.jsx("div",{ref:g,className:t.default.panel,...x.attributes,style:{...q.style,...x.style,minWidth:q.anchorWidth||void 0,visibility:q.isPositioned?void 0:"hidden"},children:P(!1)}),x.container),s==="sheet"&&r.jsx(se.default,{title:_,closeLabel:T??(d==null?void 0:d.close),onClose:u,children:P(!0)})]})},le=n.memo(ie);exports.default=le;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { CaretDownFill, CheckLg } from 'react-bootstrap-icons';\n\nimport useListboxNavigation from '../../hooks/useListboxNavigation';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport { ABOVE_MOBILE_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport BottomSheet from '../BottomSheet';\n\nimport styles from './index.module.scss';\n\nexport type SelectOption<T extends string = string> = {\n value: T;\n label: string;\n isDisabled?: boolean;\n};\n\n/** Seçenek listesinin nerede açıldığı. */\ntype OpenMode = 'popover' | 'sheet';\n\ntype Props<T extends string> = {\n options: SelectOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Alanın adı. */\n label: string;\n /** Seçim yokken tetikleyicide görünen metin. */\n placeholder?: string;\n /** Alt sayfanın kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Tetikleyicinin solundaki ikon. */\n icon?: ReactNode;\n /** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */\n size?: 'sm' | 'md';\n /** Panelin hangi kenardan hizalanacağı. */\n align?: 'start' | 'end';\n isDisabled?: boolean;\n id?: string;\n /**\n * Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.\n * ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.\n * `required` bir dönem tam olarak öyleydi: `<Field…\n */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Seçim kutusu. */\nconst Select = <T extends string>({\n options,\n value,\n onChange,\n label,\n placeholder,\n closeLabel,\n icon,\n size = 'md',\n align = 'start',\n isDisabled,\n id,\n className,\n testId,\n required,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props<T>) => {\n const { labels } = useUi();\n const emptyText = resolveLabel('Select.placeholder', placeholder, labels?.selectPlaceholder);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const listboxId = `${baseId}-listbox`;\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [openMode, setOpenMode] = useState<OpenMode | null>(null);\n\n /* PANEL SABIT KONUMLU, MUTLAK DEGIL — gerekce SCSS'te (`.panel`). */\n const positioning = usePositioning(triggerRef, panelRef, {\n side: 'bottom',\n align,\n isOpen: openMode === 'popover',\n });\n\n /*\n * Panel BODY'e (ya da icinde bulundugu acik `<dialog>`a) portallanir; gerekce\n * `hooks/usePortalSurface.ts`.\n */\n const portal = usePortalSurface(openMode === 'popover', triggerRef, panelRef);\n\n const isOpen = openMode !== null;\n const selectedIndex = options.findIndex(option => option.value === value);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n\n const close = useCallback(() => setOpenMode(null), []);\n\n const open = useCallback(() => {\n if (isDisabled || options.length === 0) return;\n\n /*\n * Etkin secenek SECILI olandan baslar (kancanin `initialIndex`i); kullanici listeyi bastan\n * taramaz.\n */\n setOpenMode(window.matchMedia(ABOVE_MOBILE_MEDIA_QUERY).matches ? 'popover' : 'sheet');\n }, [isDisabled, options.length]);\n\n const selectOption = (option: SelectOption<T>) => {\n if (option.isDisabled) return;\n onChange(option.value);\n close();\n };\n\n /* Kapaninca odak TETIKLEYICIYE doner. */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !isOpen) triggerRef.current?.focus();\n wasOpenRef.current = isOpen;\n }, [isOpen]);\n\n /*\n * Disari tiklamada panel kapanir.\n * ⚠ PANEL ARTIK KOKUN ICINDE DEGIL — portallandi. `rootRef` tek basina bakilsaydi panelin ICINE\n * yapilan `mousedown` \"disari\" sayilir ve panel…\n */\n useEffect(() => {\n if (openMode !== 'popover') return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [openMode, close]);\n\n /* KLAVYE MODELI `useListboxNavigation`da — `Combobox`la AYNI kanca. */\n const { activeIndex, setActiveIndex, listRef, handleKeyDown } =\n useListboxNavigation<HTMLUListElement>({\n count: options.length,\n isOpen,\n initialIndex: selectedIndex >= 0 ? selectedIndex : 0,\n onSelect: index => {\n const option = options[index];\n if (option) selectOption(option);\n },\n onClose: close,\n });\n\n /* Alt sayfada odak listenin kendisine gecer: ok tuslari orada isler. */\n useEffect(() => {\n if (openMode === 'sheet') listRef.current?.focus({ preventScroll: true });\n /* `listRef` kancadan geliyor ve `useRef` kimligi SABIT; bagimlilikta\n olmasi etkiyi yeniden calistirmaz, denetci ise kancadan gelen bir\n degerin referans oldugunu kanitlayamiyor. */\n }, [openMode, listRef]);\n\n /* KAPALIYKEN ok/Enter/Space paneli ACAR. */\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n open();\n }\n return;\n }\n\n handleKeyDown(event);\n };\n\n const renderList = (isSheet: boolean) => (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n /*\n * Alt sayfada baslik `BottomSheet`in icinde ve kimligi bize kapali; listenin adi dogrudan\n * yazilir.\n */\n aria-label={label}\n /*\n * Odak alt sayfada listede, panelde tetikleyicide: etkin seçeneği bildiren öznitelik odağın\n * olduğu öğede durmak zorunda.\n */\n aria-activedescendant={isSheet && options[activeIndex] ? optionId(activeIndex) : undefined}\n tabIndex={isSheet ? 0 : -1}\n className={cx(styles.list, isSheet && styles['list--sheet'])}\n onKeyDown={isSheet ? onKeyDown : undefined}\n >\n {options.map((option, index) => {\n const isChosen = option.value === value;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n data-index={index}\n aria-selected={isChosen}\n aria-disabled={option.isDisabled}\n className={cx(\n styles.option,\n index === activeIndex && styles['option--active'],\n isChosen && styles['option--selected'],\n option.isDisabled && styles['option--disabled'],\n )}\n // Fare imleci seçeneğin üstündeyken etkin seçenek de oraya taşınır; iki ayrı vurgu\n // kullanıcıyı şaşırtıyordu.\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n >\n <span className={styles.option__label}>{option.label}</span>\n {isChosen && <CheckLg aria-hidden className={styles.option__check} />}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={rootRef} className={cx(styles.select, className)} data-testid={testId}>\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n role=\"combobox\"\n className={cx(\n styles.trigger,\n styles[`trigger--${size}`],\n !selectedOption && styles['trigger--empty'],\n isOpen && styles['trigger--open'],\n isInvalid && styles['trigger--invalid'],\n )}\n disabled={isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={\n openMode === 'popover' && options[activeIndex] ? optionId(activeIndex) : undefined\n }\n /* ⚠ `aria-label` KULLANILMAZ — SECILI DEGERI MASKELIYORDU. */\n aria-labelledby={selectedOption ? `${baseId}-name ${baseId}-value` : `${baseId}-name`}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /* Tetikleyici bir `<button>`; yerel `required` yok, karsiligi bu. */\n aria-required={required || undefined}\n onClick={() => (isOpen ? close() : open())}\n onKeyDown={onKeyDown}\n >\n {icon && (\n <span className={styles.trigger__icon} aria-hidden>\n {icon}\n </span>\n )}\n\n {/* Kontrolün adı — yalnızca erişilebilirlik ağacında. */}\n <span id={`${baseId}-name`} className={styles.trigger__srName}>\n {label}\n </span>\n\n <span id={`${baseId}-value`} className={styles.trigger__value}>\n {selectedOption?.label ?? emptyText}\n </span>\n\n {/*\n * Ok DOLU CARET: ince chevron, kutunun sag ucunda `$text-2` tonunda\n * iki hairline cizgiye iniyor ve kutunun acilir oldugu uzaktan\n * okunmuyordu. Acikken 180° donuyor — yon hâlâ durumu bildiriyor.\n */}\n <CaretDownFill\n aria-hidden\n className={cx(styles.trigger__chevron, isOpen && styles['trigger__chevron--open'])}\n />\n </button>\n\n {openMode === 'popover' &&\n portal.container &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n {...portal.attributes}\n style={{\n ...positioning.style,\n ...portal.style,\n /* Panel tetikleyiciyle EN AZ ayni genislikte. */\n minWidth: positioning.anchorWidth || undefined,\n /* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */\n visibility: positioning.isPositioned ? undefined : 'hidden',\n }}\n >\n {renderList(false)}\n </div>,\n portal.container,\n )}\n\n {/* Dar ekranda liste alt sayfada acilir; panel klavye acilinca sikisiyor\n ve alt ucu ekranin disinda kaliyordu (bkz. `BottomSheet`). */}\n {openMode === 'sheet' && (\n <BottomSheet title={label} closeLabel={closeLabel ?? labels?.close} onClose={close}>\n {renderList(true)}\n </BottomSheet>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Select) as typeof Select;\n"],"names":["Select","options","value","onChange","label","placeholder","closeLabel","icon","size","align","isDisabled","id","className","testId","required","describedBy","isInvalid","labels","useUi","emptyText","resolveLabel","generatedId","useId","baseId","listboxId","optionId","index","rootRef","useRef","triggerRef","panelRef","openMode","setOpenMode","useState","positioning","usePositioning","portal","usePortalSurface","isOpen","selectedIndex","option","selectedOption","close","useCallback","open","ABOVE_MOBILE_MEDIA_QUERY","selectOption","wasOpenRef","useEffect","_a","handlePointerDown","event","target","_b","activeIndex","setActiveIndex","listRef","handleKeyDown","useListboxNavigation","onKeyDown","renderList","isSheet","jsx","cx","styles","isChosen","jsxs","CheckLg","CaretDownFill","createPortal","BottomSheet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { CaretDownFill, CheckLg } from 'react-bootstrap-icons';\n\nimport useListboxNavigation from '../../hooks/useListboxNavigation';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport { SHEET_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport BottomSheet from '../BottomSheet';\n\nimport styles from './index.module.scss';\n\nexport type SelectOption<T extends string = string> = {\n value: T;\n label: string;\n isDisabled?: boolean;\n};\n\n/** Seçenek listesinin nerede açıldığı. */\ntype OpenMode = 'popover' | 'sheet';\n\ntype Props<T extends string> = {\n options: SelectOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Alanın adı. */\n label: string;\n /** Seçim yokken tetikleyicide görünen metin. */\n placeholder?: string;\n /** Alt sayfanın kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Tetikleyicinin solundaki ikon. */\n icon?: ReactNode;\n /** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */\n size?: 'sm' | 'md';\n /** Panelin hangi kenardan hizalanacağı. */\n align?: 'start' | 'end';\n isDisabled?: boolean;\n id?: string;\n /**\n * Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.\n * ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.\n * `required` bir dönem tam olarak öyleydi: `<Field…\n */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Seçim kutusu. */\nconst Select = <T extends string>({\n options,\n value,\n onChange,\n label,\n placeholder,\n closeLabel,\n icon,\n size = 'md',\n align = 'start',\n isDisabled,\n id,\n className,\n testId,\n required,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props<T>) => {\n const { labels } = useUi();\n const emptyText = resolveLabel('Select.placeholder', placeholder, labels?.selectPlaceholder);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const listboxId = `${baseId}-listbox`;\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [openMode, setOpenMode] = useState<OpenMode | null>(null);\n\n /* PANEL SABIT KONUMLU, MUTLAK DEGIL — gerekce SCSS'te (`.panel`). */\n const positioning = usePositioning(triggerRef, panelRef, {\n side: 'bottom',\n align,\n isOpen: openMode === 'popover',\n });\n\n /*\n * Panel BODY'e (ya da icinde bulundugu acik `<dialog>`a) portallanir; gerekce\n * `hooks/usePortalSurface.ts`.\n */\n const portal = usePortalSurface(openMode === 'popover', triggerRef, panelRef);\n\n const isOpen = openMode !== null;\n const selectedIndex = options.findIndex(option => option.value === value);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n\n const close = useCallback(() => setOpenMode(null), []);\n\n const open = useCallback(() => {\n if (isDisabled || options.length === 0) return;\n\n /*\n * Etkin secenek SECILI olandan baslar (kancanin `initialIndex`i); kullanici listeyi bastan\n * taramaz.\n */\n /* A sheet only on a narrow TOUCH screen; a desktop window gets the dropdown at any width. */\n setOpenMode(window.matchMedia(SHEET_MEDIA_QUERY).matches ? 'sheet' : 'popover');\n }, [isDisabled, options.length]);\n\n const selectOption = (option: SelectOption<T>) => {\n if (option.isDisabled) return;\n onChange(option.value);\n close();\n };\n\n /* Kapaninca odak TETIKLEYICIYE doner. */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !isOpen) triggerRef.current?.focus();\n wasOpenRef.current = isOpen;\n }, [isOpen]);\n\n /*\n * Disari tiklamada panel kapanir.\n * ⚠ PANEL ARTIK KOKUN ICINDE DEGIL — portallandi. `rootRef` tek basina bakilsaydi panelin ICINE\n * yapilan `mousedown` \"disari\" sayilir ve panel…\n */\n useEffect(() => {\n if (openMode !== 'popover') return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [openMode, close]);\n\n /* KLAVYE MODELI `useListboxNavigation`da — `Combobox`la AYNI kanca. */\n const { activeIndex, setActiveIndex, listRef, handleKeyDown } =\n useListboxNavigation<HTMLUListElement>({\n count: options.length,\n isOpen,\n initialIndex: selectedIndex >= 0 ? selectedIndex : 0,\n onSelect: index => {\n const option = options[index];\n if (option) selectOption(option);\n },\n onClose: close,\n });\n\n /* Alt sayfada odak listenin kendisine gecer: ok tuslari orada isler. */\n useEffect(() => {\n if (openMode === 'sheet') listRef.current?.focus({ preventScroll: true });\n /* `listRef` kancadan geliyor ve `useRef` kimligi SABIT; bagimlilikta\n olmasi etkiyi yeniden calistirmaz, denetci ise kancadan gelen bir\n degerin referans oldugunu kanitlayamiyor. */\n }, [openMode, listRef]);\n\n /* KAPALIYKEN ok/Enter/Space paneli ACAR. */\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n open();\n }\n return;\n }\n\n handleKeyDown(event);\n };\n\n const renderList = (isSheet: boolean) => (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n /*\n * Alt sayfada baslik `BottomSheet`in icinde ve kimligi bize kapali; listenin adi dogrudan\n * yazilir.\n */\n aria-label={label}\n /*\n * Odak alt sayfada listede, panelde tetikleyicide: etkin seçeneği bildiren öznitelik odağın\n * olduğu öğede durmak zorunda.\n */\n aria-activedescendant={isSheet && options[activeIndex] ? optionId(activeIndex) : undefined}\n tabIndex={isSheet ? 0 : -1}\n className={cx(styles.list, isSheet && styles['list--sheet'])}\n onKeyDown={isSheet ? onKeyDown : undefined}\n >\n {options.map((option, index) => {\n const isChosen = option.value === value;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n data-index={index}\n aria-selected={isChosen}\n aria-disabled={option.isDisabled}\n className={cx(\n styles.option,\n index === activeIndex && styles['option--active'],\n isChosen && styles['option--selected'],\n option.isDisabled && styles['option--disabled'],\n )}\n // Fare imleci seçeneğin üstündeyken etkin seçenek de oraya taşınır; iki ayrı vurgu\n // kullanıcıyı şaşırtıyordu.\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n >\n <span className={styles.option__label}>{option.label}</span>\n {isChosen && <CheckLg aria-hidden className={styles.option__check} />}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={rootRef} className={cx(styles.select, className)} data-testid={testId}>\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n role=\"combobox\"\n className={cx(\n styles.trigger,\n styles[`trigger--${size}`],\n !selectedOption && styles['trigger--empty'],\n isOpen && styles['trigger--open'],\n isInvalid && styles['trigger--invalid'],\n )}\n disabled={isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={\n openMode === 'popover' && options[activeIndex] ? optionId(activeIndex) : undefined\n }\n /* ⚠ `aria-label` KULLANILMAZ — SECILI DEGERI MASKELIYORDU. */\n aria-labelledby={selectedOption ? `${baseId}-name ${baseId}-value` : `${baseId}-name`}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /* Tetikleyici bir `<button>`; yerel `required` yok, karsiligi bu. */\n aria-required={required || undefined}\n onClick={() => (isOpen ? close() : open())}\n onKeyDown={onKeyDown}\n >\n {icon && (\n <span className={styles.trigger__icon} aria-hidden>\n {icon}\n </span>\n )}\n\n {/* Kontrolün adı — yalnızca erişilebilirlik ağacında. */}\n <span id={`${baseId}-name`} className={styles.trigger__srName}>\n {label}\n </span>\n\n <span id={`${baseId}-value`} className={styles.trigger__value}>\n {selectedOption?.label ?? emptyText}\n </span>\n\n {/*\n * Ok DOLU CARET: ince chevron, kutunun sag ucunda `$text-2` tonunda\n * iki hairline cizgiye iniyor ve kutunun acilir oldugu uzaktan\n * okunmuyordu. Acikken 180° donuyor — yon hâlâ durumu bildiriyor.\n */}\n <CaretDownFill\n aria-hidden\n className={cx(styles.trigger__chevron, isOpen && styles['trigger__chevron--open'])}\n />\n </button>\n\n {openMode === 'popover' &&\n portal.container &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n {...portal.attributes}\n style={{\n ...positioning.style,\n ...portal.style,\n /* Panel tetikleyiciyle EN AZ ayni genislikte. */\n minWidth: positioning.anchorWidth || undefined,\n /* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */\n visibility: positioning.isPositioned ? undefined : 'hidden',\n }}\n >\n {renderList(false)}\n </div>,\n portal.container,\n )}\n\n {/* Dar ekranda liste alt sayfada acilir; panel klavye acilinca sikisiyor\n ve alt ucu ekranin disinda kaliyordu (bkz. `BottomSheet`). */}\n {openMode === 'sheet' && (\n <BottomSheet title={label} closeLabel={closeLabel ?? labels?.close} onClose={close}>\n {renderList(true)}\n </BottomSheet>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Select) as typeof Select;\n"],"names":["Select","options","value","onChange","label","placeholder","closeLabel","icon","size","align","isDisabled","id","className","testId","required","describedBy","isInvalid","labels","useUi","emptyText","resolveLabel","generatedId","useId","baseId","listboxId","optionId","index","rootRef","useRef","triggerRef","panelRef","openMode","setOpenMode","useState","positioning","usePositioning","portal","usePortalSurface","isOpen","selectedIndex","option","selectedOption","close","useCallback","open","SHEET_MEDIA_QUERY","selectOption","wasOpenRef","useEffect","_a","handlePointerDown","event","target","_b","activeIndex","setActiveIndex","listRef","handleKeyDown","useListboxNavigation","onKeyDown","renderList","isSheet","jsx","cx","styles","isChosen","jsxs","CheckLg","CaretDownFill","createPortal","BottomSheet"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as D, jsx as a } from "react/jsx-runtime";
|
|
3
|
-
import { memo as ee, useId as te, useRef as x, useState as re, useCallback as
|
|
3
|
+
import { memo as ee, useId as te, useRef as x, useState as re, useCallback as j, useEffect as E } from "react";
|
|
4
4
|
import { createPortal as oe } from "react-dom";
|
|
5
5
|
import { CaretDownFill as ne, CheckLg as ie } from "react-bootstrap-icons";
|
|
6
6
|
import ae from "../../hooks/useListboxNavigation.js";
|
|
7
7
|
import se from "../../hooks/usePortalSurface.js";
|
|
8
8
|
import le from "../../hooks/usePositioning.js";
|
|
9
|
-
import {
|
|
9
|
+
import { SHEET_MEDIA_QUERY as ce } from "../../constants/breakpoint.constants.js";
|
|
10
10
|
import { cx as f } from "../../helpers/class-name.helper.js";
|
|
11
11
|
import { resolveLabel as de } from "../../helpers/label.helper.js";
|
|
12
12
|
import { useUi as ue } from "../../theme/context.js";
|
|
@@ -15,29 +15,29 @@ const t = {"select":"ui-select-tiiPL","trigger":"ui-trigger-rHQJz","trigger--emp
|
|
|
15
15
|
const pe = ({
|
|
16
16
|
options: i,
|
|
17
17
|
value: $,
|
|
18
|
-
onChange:
|
|
18
|
+
onChange: T,
|
|
19
19
|
label: _,
|
|
20
20
|
placeholder: W,
|
|
21
21
|
closeLabel: q,
|
|
22
22
|
icon: C,
|
|
23
|
-
size:
|
|
24
|
-
align:
|
|
23
|
+
size: B = "md",
|
|
24
|
+
align: F = "start",
|
|
25
25
|
isDisabled: y,
|
|
26
|
-
id:
|
|
27
|
-
className:
|
|
26
|
+
id: H,
|
|
27
|
+
className: Q,
|
|
28
28
|
testId: Y,
|
|
29
29
|
required: z,
|
|
30
30
|
"aria-describedby": G,
|
|
31
31
|
"aria-invalid": L
|
|
32
32
|
}) => {
|
|
33
|
-
const { labels: c } = ue(),
|
|
33
|
+
const { labels: c } = ue(), J = de("Select.placeholder", W, c == null ? void 0 : c.selectPlaceholder), V = te(), s = H ?? V, R = `${s}-listbox`, w = (e) => `${s}-option-${e}`, k = x(null), v = x(null), h = x(null), [o, P] = re(null), N = le(v, h, {
|
|
34
34
|
side: "bottom",
|
|
35
|
-
align:
|
|
35
|
+
align: F,
|
|
36
36
|
isOpen: o === "popover"
|
|
37
|
-
}), g = se(o === "popover", v, h), n = o !== null, b = i.findIndex((e) => e.value === $), m = b >= 0 ? i[b] : null, d =
|
|
38
|
-
y || i.length === 0 ||
|
|
39
|
-
}, [y, i.length]),
|
|
40
|
-
e.isDisabled || (
|
|
37
|
+
}), g = se(o === "popover", v, h), n = o !== null, b = i.findIndex((e) => e.value === $), m = b >= 0 ? i[b] : null, d = j(() => P(null), []), M = j(() => {
|
|
38
|
+
y || i.length === 0 || P(window.matchMedia(ce).matches ? "sheet" : "popover");
|
|
39
|
+
}, [y, i.length]), S = (e) => {
|
|
40
|
+
e.isDisabled || (T(e.value), d());
|
|
41
41
|
}, A = x(!1);
|
|
42
42
|
E(() => {
|
|
43
43
|
var e;
|
|
@@ -45,9 +45,9 @@ const pe = ({
|
|
|
45
45
|
}, [n]), E(() => {
|
|
46
46
|
if (o !== "popover") return;
|
|
47
47
|
const e = (r) => {
|
|
48
|
-
var u,
|
|
48
|
+
var u, U;
|
|
49
49
|
const l = r.target;
|
|
50
|
-
(u = k.current) != null && u.contains(l) || (
|
|
50
|
+
(u = k.current) != null && u.contains(l) || (U = h.current) != null && U.contains(l) || d();
|
|
51
51
|
};
|
|
52
52
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
53
53
|
}, [o, d]);
|
|
@@ -57,7 +57,7 @@ const pe = ({
|
|
|
57
57
|
initialIndex: b >= 0 ? b : 0,
|
|
58
58
|
onSelect: (e) => {
|
|
59
59
|
const r = i[e];
|
|
60
|
-
r &&
|
|
60
|
+
r && S(r);
|
|
61
61
|
},
|
|
62
62
|
onClose: d
|
|
63
63
|
});
|
|
@@ -65,13 +65,13 @@ const pe = ({
|
|
|
65
65
|
var e;
|
|
66
66
|
o === "sheet" && ((e = I.current) == null || e.focus({ preventScroll: !0 }));
|
|
67
67
|
}, [o, I]);
|
|
68
|
-
const
|
|
68
|
+
const O = (e) => {
|
|
69
69
|
if (!n) {
|
|
70
|
-
["ArrowDown", "ArrowUp", "Enter", " "].includes(e.key) && (e.preventDefault(),
|
|
70
|
+
["ArrowDown", "ArrowUp", "Enter", " "].includes(e.key) && (e.preventDefault(), M());
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
Z(e);
|
|
74
|
-
},
|
|
74
|
+
}, K = (e) => /* @__PURE__ */ a(
|
|
75
75
|
"ul",
|
|
76
76
|
{
|
|
77
77
|
ref: I,
|
|
@@ -81,7 +81,7 @@ const pe = ({
|
|
|
81
81
|
"aria-activedescendant": e && i[p] ? w(p) : void 0,
|
|
82
82
|
tabIndex: e ? 0 : -1,
|
|
83
83
|
className: f(t.list, e && t["list--sheet"]),
|
|
84
|
-
onKeyDown: e ?
|
|
84
|
+
onKeyDown: e ? O : void 0,
|
|
85
85
|
children: i.map((r, l) => {
|
|
86
86
|
const u = r.value === $;
|
|
87
87
|
return /* @__PURE__ */ D(
|
|
@@ -99,7 +99,7 @@ const pe = ({
|
|
|
99
99
|
r.isDisabled && t["option--disabled"]
|
|
100
100
|
),
|
|
101
101
|
onMouseEnter: () => X(l),
|
|
102
|
-
onClick: () =>
|
|
102
|
+
onClick: () => S(r),
|
|
103
103
|
children: [
|
|
104
104
|
/* @__PURE__ */ a("span", { className: t.option__label, children: r.label }),
|
|
105
105
|
u && /* @__PURE__ */ a(ie, { "aria-hidden": !0, className: t.option__check })
|
|
@@ -110,7 +110,7 @@ const pe = ({
|
|
|
110
110
|
})
|
|
111
111
|
}
|
|
112
112
|
);
|
|
113
|
-
return /* @__PURE__ */ D("span", { ref: k, className: f(t.select,
|
|
113
|
+
return /* @__PURE__ */ D("span", { ref: k, className: f(t.select, Q), "data-testid": Y, children: [
|
|
114
114
|
/* @__PURE__ */ D(
|
|
115
115
|
"button",
|
|
116
116
|
{
|
|
@@ -120,7 +120,7 @@ const pe = ({
|
|
|
120
120
|
role: "combobox",
|
|
121
121
|
className: f(
|
|
122
122
|
t.trigger,
|
|
123
|
-
t[`trigger--${
|
|
123
|
+
t[`trigger--${B}`],
|
|
124
124
|
!m && t["trigger--empty"],
|
|
125
125
|
n && t["trigger--open"],
|
|
126
126
|
L && t["trigger--invalid"]
|
|
@@ -134,12 +134,12 @@ const pe = ({
|
|
|
134
134
|
"aria-describedby": G,
|
|
135
135
|
"aria-invalid": L,
|
|
136
136
|
"aria-required": z || void 0,
|
|
137
|
-
onClick: () => n ? d() :
|
|
138
|
-
onKeyDown:
|
|
137
|
+
onClick: () => n ? d() : M(),
|
|
138
|
+
onKeyDown: O,
|
|
139
139
|
children: [
|
|
140
140
|
C && /* @__PURE__ */ a("span", { className: t.trigger__icon, "aria-hidden": !0, children: C }),
|
|
141
141
|
/* @__PURE__ */ a("span", { id: `${s}-name`, className: t.trigger__srName, children: _ }),
|
|
142
|
-
/* @__PURE__ */ a("span", { id: `${s}-value`, className: t.trigger__value, children: (m == null ? void 0 : m.label) ??
|
|
142
|
+
/* @__PURE__ */ a("span", { id: `${s}-value`, className: t.trigger__value, children: (m == null ? void 0 : m.label) ?? J }),
|
|
143
143
|
/* @__PURE__ */ a(
|
|
144
144
|
ne,
|
|
145
145
|
{
|
|
@@ -165,12 +165,12 @@ const pe = ({
|
|
|
165
165
|
/* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */
|
|
166
166
|
visibility: N.isPositioned ? void 0 : "hidden"
|
|
167
167
|
},
|
|
168
|
-
children:
|
|
168
|
+
children: K(!1)
|
|
169
169
|
}
|
|
170
170
|
),
|
|
171
171
|
g.container
|
|
172
172
|
),
|
|
173
|
-
o === "sheet" && /* @__PURE__ */ a(me, { title: _, closeLabel: q ?? (c == null ? void 0 : c.close), onClose: d, children:
|
|
173
|
+
o === "sheet" && /* @__PURE__ */ a(me, { title: _, closeLabel: q ?? (c == null ? void 0 : c.close), onClose: d, children: K(!0) })
|
|
174
174
|
] });
|
|
175
175
|
}, $e = /* @__PURE__ */ ee(pe);
|
|
176
176
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { CaretDownFill, CheckLg } from 'react-bootstrap-icons';\n\nimport useListboxNavigation from '../../hooks/useListboxNavigation';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport { ABOVE_MOBILE_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport BottomSheet from '../BottomSheet';\n\nimport styles from './index.module.scss';\n\nexport type SelectOption<T extends string = string> = {\n value: T;\n label: string;\n isDisabled?: boolean;\n};\n\n/** Seçenek listesinin nerede açıldığı. */\ntype OpenMode = 'popover' | 'sheet';\n\ntype Props<T extends string> = {\n options: SelectOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Alanın adı. */\n label: string;\n /** Seçim yokken tetikleyicide görünen metin. */\n placeholder?: string;\n /** Alt sayfanın kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Tetikleyicinin solundaki ikon. */\n icon?: ReactNode;\n /** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */\n size?: 'sm' | 'md';\n /** Panelin hangi kenardan hizalanacağı. */\n align?: 'start' | 'end';\n isDisabled?: boolean;\n id?: string;\n /**\n * Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.\n * ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.\n * `required` bir dönem tam olarak öyleydi: `<Field…\n */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Seçim kutusu. */\nconst Select = <T extends string>({\n options,\n value,\n onChange,\n label,\n placeholder,\n closeLabel,\n icon,\n size = 'md',\n align = 'start',\n isDisabled,\n id,\n className,\n testId,\n required,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props<T>) => {\n const { labels } = useUi();\n const emptyText = resolveLabel('Select.placeholder', placeholder, labels?.selectPlaceholder);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const listboxId = `${baseId}-listbox`;\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [openMode, setOpenMode] = useState<OpenMode | null>(null);\n\n /* PANEL SABIT KONUMLU, MUTLAK DEGIL — gerekce SCSS'te (`.panel`). */\n const positioning = usePositioning(triggerRef, panelRef, {\n side: 'bottom',\n align,\n isOpen: openMode === 'popover',\n });\n\n /*\n * Panel BODY'e (ya da icinde bulundugu acik `<dialog>`a) portallanir; gerekce\n * `hooks/usePortalSurface.ts`.\n */\n const portal = usePortalSurface(openMode === 'popover', triggerRef, panelRef);\n\n const isOpen = openMode !== null;\n const selectedIndex = options.findIndex(option => option.value === value);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n\n const close = useCallback(() => setOpenMode(null), []);\n\n const open = useCallback(() => {\n if (isDisabled || options.length === 0) return;\n\n /*\n * Etkin secenek SECILI olandan baslar (kancanin `initialIndex`i); kullanici listeyi bastan\n * taramaz.\n */\n setOpenMode(window.matchMedia(ABOVE_MOBILE_MEDIA_QUERY).matches ? 'popover' : 'sheet');\n }, [isDisabled, options.length]);\n\n const selectOption = (option: SelectOption<T>) => {\n if (option.isDisabled) return;\n onChange(option.value);\n close();\n };\n\n /* Kapaninca odak TETIKLEYICIYE doner. */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !isOpen) triggerRef.current?.focus();\n wasOpenRef.current = isOpen;\n }, [isOpen]);\n\n /*\n * Disari tiklamada panel kapanir.\n * ⚠ PANEL ARTIK KOKUN ICINDE DEGIL — portallandi. `rootRef` tek basina bakilsaydi panelin ICINE\n * yapilan `mousedown` \"disari\" sayilir ve panel…\n */\n useEffect(() => {\n if (openMode !== 'popover') return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [openMode, close]);\n\n /* KLAVYE MODELI `useListboxNavigation`da — `Combobox`la AYNI kanca. */\n const { activeIndex, setActiveIndex, listRef, handleKeyDown } =\n useListboxNavigation<HTMLUListElement>({\n count: options.length,\n isOpen,\n initialIndex: selectedIndex >= 0 ? selectedIndex : 0,\n onSelect: index => {\n const option = options[index];\n if (option) selectOption(option);\n },\n onClose: close,\n });\n\n /* Alt sayfada odak listenin kendisine gecer: ok tuslari orada isler. */\n useEffect(() => {\n if (openMode === 'sheet') listRef.current?.focus({ preventScroll: true });\n /* `listRef` kancadan geliyor ve `useRef` kimligi SABIT; bagimlilikta\n olmasi etkiyi yeniden calistirmaz, denetci ise kancadan gelen bir\n degerin referans oldugunu kanitlayamiyor. */\n }, [openMode, listRef]);\n\n /* KAPALIYKEN ok/Enter/Space paneli ACAR. */\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n open();\n }\n return;\n }\n\n handleKeyDown(event);\n };\n\n const renderList = (isSheet: boolean) => (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n /*\n * Alt sayfada baslik `BottomSheet`in icinde ve kimligi bize kapali; listenin adi dogrudan\n * yazilir.\n */\n aria-label={label}\n /*\n * Odak alt sayfada listede, panelde tetikleyicide: etkin seçeneği bildiren öznitelik odağın\n * olduğu öğede durmak zorunda.\n */\n aria-activedescendant={isSheet && options[activeIndex] ? optionId(activeIndex) : undefined}\n tabIndex={isSheet ? 0 : -1}\n className={cx(styles.list, isSheet && styles['list--sheet'])}\n onKeyDown={isSheet ? onKeyDown : undefined}\n >\n {options.map((option, index) => {\n const isChosen = option.value === value;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n data-index={index}\n aria-selected={isChosen}\n aria-disabled={option.isDisabled}\n className={cx(\n styles.option,\n index === activeIndex && styles['option--active'],\n isChosen && styles['option--selected'],\n option.isDisabled && styles['option--disabled'],\n )}\n // Fare imleci seçeneğin üstündeyken etkin seçenek de oraya taşınır; iki ayrı vurgu\n // kullanıcıyı şaşırtıyordu.\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n >\n <span className={styles.option__label}>{option.label}</span>\n {isChosen && <CheckLg aria-hidden className={styles.option__check} />}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={rootRef} className={cx(styles.select, className)} data-testid={testId}>\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n role=\"combobox\"\n className={cx(\n styles.trigger,\n styles[`trigger--${size}`],\n !selectedOption && styles['trigger--empty'],\n isOpen && styles['trigger--open'],\n isInvalid && styles['trigger--invalid'],\n )}\n disabled={isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={\n openMode === 'popover' && options[activeIndex] ? optionId(activeIndex) : undefined\n }\n /* ⚠ `aria-label` KULLANILMAZ — SECILI DEGERI MASKELIYORDU. */\n aria-labelledby={selectedOption ? `${baseId}-name ${baseId}-value` : `${baseId}-name`}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /* Tetikleyici bir `<button>`; yerel `required` yok, karsiligi bu. */\n aria-required={required || undefined}\n onClick={() => (isOpen ? close() : open())}\n onKeyDown={onKeyDown}\n >\n {icon && (\n <span className={styles.trigger__icon} aria-hidden>\n {icon}\n </span>\n )}\n\n {/* Kontrolün adı — yalnızca erişilebilirlik ağacında. */}\n <span id={`${baseId}-name`} className={styles.trigger__srName}>\n {label}\n </span>\n\n <span id={`${baseId}-value`} className={styles.trigger__value}>\n {selectedOption?.label ?? emptyText}\n </span>\n\n {/*\n * Ok DOLU CARET: ince chevron, kutunun sag ucunda `$text-2` tonunda\n * iki hairline cizgiye iniyor ve kutunun acilir oldugu uzaktan\n * okunmuyordu. Acikken 180° donuyor — yon hâlâ durumu bildiriyor.\n */}\n <CaretDownFill\n aria-hidden\n className={cx(styles.trigger__chevron, isOpen && styles['trigger__chevron--open'])}\n />\n </button>\n\n {openMode === 'popover' &&\n portal.container &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n {...portal.attributes}\n style={{\n ...positioning.style,\n ...portal.style,\n /* Panel tetikleyiciyle EN AZ ayni genislikte. */\n minWidth: positioning.anchorWidth || undefined,\n /* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */\n visibility: positioning.isPositioned ? undefined : 'hidden',\n }}\n >\n {renderList(false)}\n </div>,\n portal.container,\n )}\n\n {/* Dar ekranda liste alt sayfada acilir; panel klavye acilinca sikisiyor\n ve alt ucu ekranin disinda kaliyordu (bkz. `BottomSheet`). */}\n {openMode === 'sheet' && (\n <BottomSheet title={label} closeLabel={closeLabel ?? labels?.close} onClose={close}>\n {renderList(true)}\n </BottomSheet>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Select) as typeof Select;\n"],"names":["Select","options","value","onChange","label","placeholder","closeLabel","icon","size","align","isDisabled","id","className","testId","required","describedBy","isInvalid","labels","useUi","emptyText","resolveLabel","generatedId","useId","baseId","listboxId","optionId","index","rootRef","useRef","triggerRef","panelRef","openMode","setOpenMode","useState","positioning","usePositioning","portal","usePortalSurface","isOpen","selectedIndex","option","selectedOption","close","useCallback","open","ABOVE_MOBILE_MEDIA_QUERY","selectOption","wasOpenRef","useEffect","_a","handlePointerDown","event","target","_b","activeIndex","setActiveIndex","listRef","handleKeyDown","useListboxNavigation","onKeyDown","renderList","isSheet","jsx","cx","styles","isChosen","jsxs","CheckLg","CaretDownFill","createPortal","BottomSheet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { CaretDownFill, CheckLg } from 'react-bootstrap-icons';\n\nimport useListboxNavigation from '../../hooks/useListboxNavigation';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport { SHEET_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport BottomSheet from '../BottomSheet';\n\nimport styles from './index.module.scss';\n\nexport type SelectOption<T extends string = string> = {\n value: T;\n label: string;\n isDisabled?: boolean;\n};\n\n/** Seçenek listesinin nerede açıldığı. */\ntype OpenMode = 'popover' | 'sheet';\n\ntype Props<T extends string> = {\n options: SelectOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Alanın adı. */\n label: string;\n /** Seçim yokken tetikleyicide görünen metin. */\n placeholder?: string;\n /** Alt sayfanın kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Tetikleyicinin solundaki ikon. */\n icon?: ReactNode;\n /** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */\n size?: 'sm' | 'md';\n /** Panelin hangi kenardan hizalanacağı. */\n align?: 'start' | 'end';\n isDisabled?: boolean;\n id?: string;\n /**\n * Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.\n * ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.\n * `required` bir dönem tam olarak öyleydi: `<Field…\n */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Seçim kutusu. */\nconst Select = <T extends string>({\n options,\n value,\n onChange,\n label,\n placeholder,\n closeLabel,\n icon,\n size = 'md',\n align = 'start',\n isDisabled,\n id,\n className,\n testId,\n required,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props<T>) => {\n const { labels } = useUi();\n const emptyText = resolveLabel('Select.placeholder', placeholder, labels?.selectPlaceholder);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const listboxId = `${baseId}-listbox`;\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [openMode, setOpenMode] = useState<OpenMode | null>(null);\n\n /* PANEL SABIT KONUMLU, MUTLAK DEGIL — gerekce SCSS'te (`.panel`). */\n const positioning = usePositioning(triggerRef, panelRef, {\n side: 'bottom',\n align,\n isOpen: openMode === 'popover',\n });\n\n /*\n * Panel BODY'e (ya da icinde bulundugu acik `<dialog>`a) portallanir; gerekce\n * `hooks/usePortalSurface.ts`.\n */\n const portal = usePortalSurface(openMode === 'popover', triggerRef, panelRef);\n\n const isOpen = openMode !== null;\n const selectedIndex = options.findIndex(option => option.value === value);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n\n const close = useCallback(() => setOpenMode(null), []);\n\n const open = useCallback(() => {\n if (isDisabled || options.length === 0) return;\n\n /*\n * Etkin secenek SECILI olandan baslar (kancanin `initialIndex`i); kullanici listeyi bastan\n * taramaz.\n */\n /* A sheet only on a narrow TOUCH screen; a desktop window gets the dropdown at any width. */\n setOpenMode(window.matchMedia(SHEET_MEDIA_QUERY).matches ? 'sheet' : 'popover');\n }, [isDisabled, options.length]);\n\n const selectOption = (option: SelectOption<T>) => {\n if (option.isDisabled) return;\n onChange(option.value);\n close();\n };\n\n /* Kapaninca odak TETIKLEYICIYE doner. */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !isOpen) triggerRef.current?.focus();\n wasOpenRef.current = isOpen;\n }, [isOpen]);\n\n /*\n * Disari tiklamada panel kapanir.\n * ⚠ PANEL ARTIK KOKUN ICINDE DEGIL — portallandi. `rootRef` tek basina bakilsaydi panelin ICINE\n * yapilan `mousedown` \"disari\" sayilir ve panel…\n */\n useEffect(() => {\n if (openMode !== 'popover') return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [openMode, close]);\n\n /* KLAVYE MODELI `useListboxNavigation`da — `Combobox`la AYNI kanca. */\n const { activeIndex, setActiveIndex, listRef, handleKeyDown } =\n useListboxNavigation<HTMLUListElement>({\n count: options.length,\n isOpen,\n initialIndex: selectedIndex >= 0 ? selectedIndex : 0,\n onSelect: index => {\n const option = options[index];\n if (option) selectOption(option);\n },\n onClose: close,\n });\n\n /* Alt sayfada odak listenin kendisine gecer: ok tuslari orada isler. */\n useEffect(() => {\n if (openMode === 'sheet') listRef.current?.focus({ preventScroll: true });\n /* `listRef` kancadan geliyor ve `useRef` kimligi SABIT; bagimlilikta\n olmasi etkiyi yeniden calistirmaz, denetci ise kancadan gelen bir\n degerin referans oldugunu kanitlayamiyor. */\n }, [openMode, listRef]);\n\n /* KAPALIYKEN ok/Enter/Space paneli ACAR. */\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n open();\n }\n return;\n }\n\n handleKeyDown(event);\n };\n\n const renderList = (isSheet: boolean) => (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n /*\n * Alt sayfada baslik `BottomSheet`in icinde ve kimligi bize kapali; listenin adi dogrudan\n * yazilir.\n */\n aria-label={label}\n /*\n * Odak alt sayfada listede, panelde tetikleyicide: etkin seçeneği bildiren öznitelik odağın\n * olduğu öğede durmak zorunda.\n */\n aria-activedescendant={isSheet && options[activeIndex] ? optionId(activeIndex) : undefined}\n tabIndex={isSheet ? 0 : -1}\n className={cx(styles.list, isSheet && styles['list--sheet'])}\n onKeyDown={isSheet ? onKeyDown : undefined}\n >\n {options.map((option, index) => {\n const isChosen = option.value === value;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n data-index={index}\n aria-selected={isChosen}\n aria-disabled={option.isDisabled}\n className={cx(\n styles.option,\n index === activeIndex && styles['option--active'],\n isChosen && styles['option--selected'],\n option.isDisabled && styles['option--disabled'],\n )}\n // Fare imleci seçeneğin üstündeyken etkin seçenek de oraya taşınır; iki ayrı vurgu\n // kullanıcıyı şaşırtıyordu.\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n >\n <span className={styles.option__label}>{option.label}</span>\n {isChosen && <CheckLg aria-hidden className={styles.option__check} />}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={rootRef} className={cx(styles.select, className)} data-testid={testId}>\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n role=\"combobox\"\n className={cx(\n styles.trigger,\n styles[`trigger--${size}`],\n !selectedOption && styles['trigger--empty'],\n isOpen && styles['trigger--open'],\n isInvalid && styles['trigger--invalid'],\n )}\n disabled={isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={\n openMode === 'popover' && options[activeIndex] ? optionId(activeIndex) : undefined\n }\n /* ⚠ `aria-label` KULLANILMAZ — SECILI DEGERI MASKELIYORDU. */\n aria-labelledby={selectedOption ? `${baseId}-name ${baseId}-value` : `${baseId}-name`}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /* Tetikleyici bir `<button>`; yerel `required` yok, karsiligi bu. */\n aria-required={required || undefined}\n onClick={() => (isOpen ? close() : open())}\n onKeyDown={onKeyDown}\n >\n {icon && (\n <span className={styles.trigger__icon} aria-hidden>\n {icon}\n </span>\n )}\n\n {/* Kontrolün adı — yalnızca erişilebilirlik ağacında. */}\n <span id={`${baseId}-name`} className={styles.trigger__srName}>\n {label}\n </span>\n\n <span id={`${baseId}-value`} className={styles.trigger__value}>\n {selectedOption?.label ?? emptyText}\n </span>\n\n {/*\n * Ok DOLU CARET: ince chevron, kutunun sag ucunda `$text-2` tonunda\n * iki hairline cizgiye iniyor ve kutunun acilir oldugu uzaktan\n * okunmuyordu. Acikken 180° donuyor — yon hâlâ durumu bildiriyor.\n */}\n <CaretDownFill\n aria-hidden\n className={cx(styles.trigger__chevron, isOpen && styles['trigger__chevron--open'])}\n />\n </button>\n\n {openMode === 'popover' &&\n portal.container &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n {...portal.attributes}\n style={{\n ...positioning.style,\n ...portal.style,\n /* Panel tetikleyiciyle EN AZ ayni genislikte. */\n minWidth: positioning.anchorWidth || undefined,\n /* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */\n visibility: positioning.isPositioned ? undefined : 'hidden',\n }}\n >\n {renderList(false)}\n </div>,\n portal.container,\n )}\n\n {/* Dar ekranda liste alt sayfada acilir; panel klavye acilinca sikisiyor\n ve alt ucu ekranin disinda kaliyordu (bkz. `BottomSheet`). */}\n {openMode === 'sheet' && (\n <BottomSheet title={label} closeLabel={closeLabel ?? labels?.close} onClose={close}>\n {renderList(true)}\n </BottomSheet>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Select) as typeof Select;\n"],"names":["Select","options","value","onChange","label","placeholder","closeLabel","icon","size","align","isDisabled","id","className","testId","required","describedBy","isInvalid","labels","useUi","emptyText","resolveLabel","generatedId","useId","baseId","listboxId","optionId","index","rootRef","useRef","triggerRef","panelRef","openMode","setOpenMode","useState","positioning","usePositioning","portal","usePortalSurface","isOpen","selectedIndex","option","selectedOption","close","useCallback","open","SHEET_MEDIA_QUERY","selectOption","wasOpenRef","useEffect","_a","handlePointerDown","event","target","_b","activeIndex","setActiveIndex","listRef","handleKeyDown","useListboxNavigation","onKeyDown","renderList","isSheet","jsx","cx","styles","isChosen","jsxs","CheckLg","CaretDownFill","createPortal","BottomSheet"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-select-tiiPL{position:relative;display:block;width:100%}.ui-trigger-rHQJz{width:100%;font-family:var(--
|
|
1
|
+
@layer ui{.ui-select-tiiPL{position:relative;display:block;width:100%}.ui-trigger-rHQJz{width:100%;font-family:var(--hd-font-body);font-size:var(--hd-type-body-size);line-height:var(--hd-type-h4-line-height);color:var(--hd-text);background-color:var(--hd-bg-surface);border:1px solid var(--hd-border-strong);border-radius:var(--hd-radius-sm);padding:var(--hd-space-2) var(--hd-space-3);min-height:40px}@media (max-width: 640px){.ui-trigger-rHQJz{min-height:44px;font-size:max(16px,var(--hd-type-body-size))}}@media (hover: none) and (pointer: coarse){.ui-trigger-rHQJz{min-height:44px;font-size:max(16px,var(--hd-type-body-size))}}.ui-trigger-rHQJz{transition:border-color var(--hd-duration-fast) var(--hd-ease-standard),box-shadow var(--hd-duration-fast) var(--hd-ease-standard)}.ui-trigger-rHQJz::placeholder{color:var(--ui-placeholder, var(--hd-text-3))}.ui-trigger-rHQJz:hover:not(:disabled):not([aria-invalid=true]){border-color:color-mix(in oklab,var(--hd-border-strong),var(--hd-text) 30%)}.ui-trigger-rHQJz:focus{outline:none;border-color:var(--hd-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent)}.ui-trigger-rHQJz:disabled{background-color:var(--hd-bg-raised);border-color:var(--hd-border);cursor:not-allowed;color:var(--hd-text-3)}@media (forced-colors: active){.ui-trigger-rHQJz:disabled{color:GrayText;border-color:GrayText}}.ui-trigger-rHQJz[aria-invalid=true]{border-color:var(--hd-danger-solid)}.ui-trigger-rHQJz[aria-invalid=true]:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-danger-solid) 28%,transparent)}@media (prefers-reduced-motion: reduce){.ui-trigger-rHQJz{transition:none}}.ui-trigger-rHQJz{display:flex;align-items:center;gap:var(--hd-space-2);text-align:start;cursor:pointer}.ui-trigger--empty-cuinb{color:var(--hd-text-3)}.ui-trigger--open-1nsvu{border-color:var(--hd-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent)}.ui-trigger--invalid-NtP0W{border-color:var(--hd-danger-solid)}.ui-trigger--sm-Xnu1C{min-height:32px;padding-block:0;padding-inline:var(--hd-space-3);font-size:var(--hd-type-small-size)}@media (max-width: 640px){.ui-trigger--sm-Xnu1C{min-height:32px;font-size:var(--hd-type-small-size)}}@media (hover: none) and (pointer: coarse){.ui-trigger--sm-Xnu1C{min-height:32px;font-size:var(--hd-type-small-size)}}.ui-trigger--sm-Xnu1C{position:relative}.ui-trigger--sm-Xnu1C:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-trigger--sm-Xnu1C{font-weight:var(--hd-font-weight-medium)}.ui-trigger__icon-apCcx{display:inline-flex;color:var(--hd-text-2);flex-shrink:0;font-size:18px}.ui-trigger__srName-XLCxt{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-trigger__value-ioH7K{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.ui-trigger__chevron-FtsIZ{color:var(--hd-text-2);flex-shrink:0;font-size:14px;transition:transform var(--hd-duration-fast) var(--hd-ease-standard)}.ui-trigger__chevron--open-1P2P-{transform:rotate(180deg)}@media (prefers-reduced-motion: reduce){.ui-trigger__chevron-FtsIZ{transition:none}}.ui-panel-rGOOd{position:fixed;z-index:var(--hd-z-popover);min-width:200px;background-color:var(--hd-bg-overlay);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);box-shadow:var(--hd-shadow-2);overflow:hidden;animation:var(--ui-anim-fade-in-up) var(--hd-duration-fast) var(--hd-ease-standard)}@media (prefers-reduced-motion: reduce){.ui-panel-rGOOd{animation:none}}.ui-list-SOKf8{position:relative;max-height:280px;overflow-y:auto;padding:var(--hd-space-1);margin:0;list-style:none;scrollbar-width:thin;scrollbar-color:var(--hd-border-strong) transparent}.ui-list-SOKf8::-webkit-scrollbar{width:8px;height:8px}.ui-list-SOKf8::-webkit-scrollbar-track{background:transparent}.ui-list-SOKf8::-webkit-scrollbar-thumb{background-color:var(--hd-border-strong);border-radius:var(--hd-radius-pill);border:2px solid transparent;background-clip:content-box}.ui-list-SOKf8::-webkit-scrollbar-thumb:hover{background-color:var(--hd-text-3)}.ui-list-SOKf8:focus{outline:none}.ui-list--sheet-BIjCb{max-height:none;overflow:visible;padding:0}.ui-list--sheet-BIjCb .ui-option-ZDPef{min-height:48px;font-size:var(--hd-type-body-size);border-radius:var(--hd-radius-sm)}.ui-option-ZDPef{display:flex;align-items:center;gap:var(--hd-space-2);justify-content:space-between;padding:var(--hd-space-2) var(--hd-space-3);border-radius:var(--hd-radius-xs);font-size:var(--hd-type-small-size);color:var(--hd-text);cursor:pointer;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-option--active-R4lLF{background-color:color-mix(in srgb,var(--hd-text) 8%,transparent)}.ui-option--selected-glQMj{background-color:var(--hd-primary-soft);color:var(--hd-text);font-weight:var(--hd-font-weight-semibold)}.ui-option--disabled-h4rdd{color:var(--hd-text-3);cursor:not-allowed}.ui-option--disabled-h4rdd:hover{background-color:transparent}.ui-option__label-SsoYB{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.ui-option__check-8CPSG{color:var(--hd-text);flex-shrink:0;font-size:18px}@media (prefers-reduced-motion: reduce){.ui-option-ZDPef{transition:none}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-skeleton-n92if{background:linear-gradient(90deg,var(--
|
|
1
|
+
@layer ui{.ui-skeleton-n92if{background:linear-gradient(90deg,var(--hd-bg-disabled) 0%,var(--hd-border) 50%,var(--hd-bg-disabled) 100%);background-size:200% 100%;animation:var(--ui-anim-shimmer) 1.4s ease-in-out infinite;border-radius:var(--hd-radius-xs)}@media (prefers-reduced-motion: reduce){.ui-skeleton-n92if{animation:none}}.ui-skeleton-n92if{display:block}.ui-skeleton--block-tOZ-a{width:100%;height:100%}.ui-skeleton--text-k-ROi{height:1em;border-radius:var(--hd-radius-xs)}.ui-skeleton--circle-x-mX3{border-radius:var(--hd-radius-pill);aspect-ratio:1}.ui-group-YMfwa{display:flex;flex-direction:column;gap:var(--hd-space-2)}.ui-card-XQs-Q{border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);background-color:var(--hd-bg-surface);overflow:hidden}.ui-card__media-YLJDv{aspect-ratio:1.4;width:100%;height:auto;border-radius:0}.ui-card__body-msRvB{display:flex;flex-direction:column;gap:var(--hd-space-2);padding:var(--hd-space-3)}.ui-rows-EZ9Am{display:flex;flex-direction:column;gap:var(--hd-space-3)}.ui-row-se56N{display:flex;align-items:center;gap:var(--hd-space-3)}.ui-row__text-TD4iS{display:flex;flex-direction:column;gap:var(--hd-space-1);flex:1;min-width:0}.ui-table-L328g{display:flex;flex-direction:column;gap:var(--hd-space-3);padding:var(--hd-space-3);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);background-color:var(--hd-bg-surface)}.ui-table__row-rSJTK{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:var(--hd-space-3);align-items:center;min-height:40px}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-spinner-7pXwf{display:inline-block;border-radius:var(--
|
|
1
|
+
@layer ui{.ui-spinner-7pXwf{display:inline-block;border-radius:var(--hd-radius-pill);border:2px solid var(--hd-border);border-top-color:var(--hd-primary);animation:var(--ui-anim-spin) .7s linear infinite}.ui-spinner__label-sZvSq{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-spinner--sm-uI0wH{width:14px;height:14px}.ui-spinner--md--VmFK{width:20px;height:20px}.ui-spinner--lg-K9k-Z{width:32px;height:32px;border-width:3px}@media (prefers-reduced-motion: reduce){.ui-spinner-7pXwf{animation:none;border-top-color:var(--hd-primary)}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-stat-Xb7wp{display:flex;flex-direction:column;gap:var(--
|
|
1
|
+
@layer ui{.ui-stat-Xb7wp{display:flex;flex-direction:column;gap:var(--hd-space-1);position:relative;padding:var(--hd-space-4);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);background-color:var(--hd-bg-surface)}.ui-stat--sm-XnK8p{padding:var(--hd-space-3)}.ui-stat--plain-N-3RC{padding:0;border:0;background:none}.ui-stat--plain-N-3RC .ui-stat__icon-MB8NU{inset-block-start:0;inset-inline-end:0}.ui-stat--inline-IpE0J{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:var(--hd-space-1) var(--hd-space-2);padding:0;border:0;background:none}.ui-stat--inline-IpE0J .ui-stat__icon-MB8NU{position:static;align-self:center;font-size:16px}.ui-stat--inline-IpE0J .ui-stat__label-kUX2m{padding-inline-end:0}.ui-stat--inline-IpE0J .ui-stat__value--6p13{font-family:var(--hd-font-mono);font-size:var(--hd-type-caption-size);letter-spacing:.02em;font-variant-numeric:tabular-nums;font-weight:var(--hd-font-weight-medium);letter-spacing:normal}.ui-stat--inline-IpE0J .ui-stat__unit-mjHVk{font-size:inherit}.ui-stat__icon-MB8NU{position:absolute;inset-block-start:var(--hd-space-3);inset-inline-end:var(--hd-space-3);display:inline-flex;font-size:20px;color:var(--hd-text-3)}.ui-stat__label-kUX2m{font-family:var(--ui-stat-label-font, inherit);font-size:var(--ui-stat-label-size, var(--hd-type-caption-size));font-weight:var(--ui-stat-label-weight, var(--hd-font-weight-medium));letter-spacing:var(--ui-stat-label-tracking, normal);text-transform:var(--ui-stat-label-transform, none);color:var(--hd-text-2);padding-inline-end:var(--hd-space-6)}.ui-stat__value--6p13{display:flex;align-items:baseline;gap:var(--hd-space-1);font-family:var(--ui-stat-value-font, var(--hd-font-display));font-size:var(--hd-type-h2-size);font-weight:var(--ui-stat-value-weight, var(--hd-font-weight-bold));line-height:var(--hd-type-h2-line-height);letter-spacing:var(--ui-stat-value-tracking, var(--hd-type-h2-letter-spacing));color:var(--hd-text);font-variant-numeric:tabular-nums}.ui-stat--sm-XnK8p .ui-stat__value--6p13{font-size:var(--hd-type-h3-size)}.ui-stat__unit-mjHVk{font-family:var(--ui-stat-unit-font, inherit);font-size:var(--ui-stat-unit-size, var(--hd-type-small-size));font-weight:var(--hd-font-weight-medium);color:var(--hd-text-2);letter-spacing:var(--ui-stat-unit-tracking, normal);text-transform:var(--ui-stat-unit-transform, none)}.ui-stat__delta-YKpOu{display:flex;align-items:center;gap:2px;align-self:flex-start;font-size:var(--hd-type-caption-size);font-weight:var(--hd-font-weight-semibold);font-variant-numeric:tabular-nums;color:var(--hd-text-2)}.ui-stat__delta-YKpOu svg{font-size:16px;flex-shrink:0}.ui-stat__delta--positive-1AUAM{color:var(--hd-success-fg)}.ui-stat__delta--negative--WWEP{color:var(--hd-danger-fg)}.ui-stat__description-Yvw6J{font-size:var(--hd-type-caption-size);color:var(--hd-text-3)}.ui-stat__srOnly-YKebA{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-status-EcSH2{display:inline-flex;align-items:center;flex-shrink:0}.ui-status__dot-CeQ59{display:block;width:8px;height:8px;border-radius:var(--
|
|
1
|
+
@layer ui{.ui-status-EcSH2{display:inline-flex;align-items:center;flex-shrink:0}.ui-status__dot-CeQ59{display:block;width:8px;height:8px;border-radius:var(--hd-radius-pill);background-color:currentColor}.ui-status__dot--neutral-qUw4d{color:var(--hd-text-2)}.ui-status__dot--success-oOq-v{color:var(--hd-success-fg)}.ui-status__dot--warning-gYCr3{color:var(--hd-warning-fg)}.ui-status__dot--danger-ijrpR{color:var(--hd-danger-fg)}.ui-status__dot--pulsing-l97tj{animation:var(--ui-anim-pulse) 1.6s var(--hd-ease-standard) infinite}@media (prefers-reduced-motion: reduce){.ui-status__dot--pulsing-l97tj{animation:none}}@media (forced-colors: active){.ui-status__dot-CeQ59{background-color:CanvasText;forced-color-adjust:none}}.ui-status__label-UXRIa{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-steps-ntge1{display:flex;margin:0;padding:0;list-style:none}.ui-steps--horizontal-O-mkx{flex-direction:row;gap:var(--
|
|
1
|
+
@layer ui{.ui-steps-ntge1{display:flex;margin:0;padding:0;list-style:none}.ui-steps--horizontal-O-mkx{flex-direction:row;gap:var(--hd-space-2)}@media (max-width: 640px){.ui-steps--horizontal-O-mkx{flex-direction:column;gap:var(--hd-space-1)}}.ui-steps--vertical-agfwo{flex-direction:column;gap:var(--hd-space-1)}.ui-steps--static-t9EED .ui-steps__label-NSeFM{white-space:normal;overflow:visible;text-overflow:clip;color:var(--hd-text)}.ui-steps__item-GrU1x{display:flex;flex:1;min-width:0}.ui-steps--horizontal-O-mkx .ui-steps__item-GrU1x:not(:last-child):after{content:"";align-self:center;flex:1;height:1px;margin-inline:var(--hd-space-2);background-color:var(--hd-border)}@media (max-width: 640px){.ui-steps--horizontal-O-mkx .ui-steps__item-GrU1x:not(:last-child):after{display:none}}.ui-steps__button-XBsnS{display:flex;align-items:center;gap:var(--hd-space-3);flex:0 1 auto;min-width:0;padding:var(--hd-space-2);border:none;border-radius:var(--hd-radius-sm);background:none;text-align:start;font-family:var(--hd-font-body);color:inherit}button.ui-steps__button-XBsnS{background-color:transparent;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard),translate var(--hd-duration-fast) var(--hd-ease-standard)}button.ui-steps__button-XBsnS:hover:not(:disabled):not([aria-disabled=true]){background-color:color-mix(in srgb,var(--hd-text) 8%,transparent)}button.ui-steps__button-XBsnS:active:not(:disabled):not([aria-disabled=true]){background-color:color-mix(in srgb,var(--hd-text) 14%,transparent);translate:0 1px}@media (prefers-reduced-motion: reduce){button.ui-steps__button-XBsnS{transition:none}button.ui-steps__button-XBsnS:active:not(:disabled):not([aria-disabled=true]){translate:none}}button.ui-steps__button-XBsnS{cursor:pointer}button.ui-steps__button-XBsnS:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, -1px)}.ui-steps__marker-g-GLE{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;border-radius:var(--hd-radius-pill);border:1px solid var(--hd-border-strong);background-color:var(--hd-bg-surface);color:var(--hd-text-2);font-size:var(--hd-type-caption-size);font-weight:var(--hd-font-weight-semibold);font-variant-numeric:tabular-nums}.ui-steps__item--done-mvOuN .ui-steps__marker-g-GLE{background-color:var(--hd-primary);border-color:var(--hd-primary);color:var(--hd-on-primary)}.ui-steps__item--current-Qzlal .ui-steps__marker-g-GLE{border-color:var(--hd-primary);box-shadow:inset 0 0 0 1px var(--hd-primary);color:var(--hd-text)}@media (forced-colors: active){.ui-steps__item--done-mvOuN .ui-steps__marker-g-GLE,.ui-steps__item--current-Qzlal .ui-steps__marker-g-GLE{background-color:Highlight;color:HighlightText;forced-color-adjust:none}}.ui-steps__text-Mkpkh{display:flex;flex-direction:column;gap:2px;min-width:0}.ui-steps__label-NSeFM{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--hd-type-small-size);font-weight:var(--hd-font-weight-medium);color:var(--hd-text-2)}.ui-steps__item--current-Qzlal .ui-steps__label-NSeFM{color:var(--hd-text);font-weight:var(--hd-font-weight-semibold)}.ui-steps__item--done-mvOuN .ui-steps__label-NSeFM{color:var(--hd-text)}.ui-steps__description-bQuNT{font-size:var(--hd-type-caption-size);color:var(--hd-text-3)}.ui-steps__status-wWJfP{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer ui{.ui-card-wkzhi{background-color:var(--
|
|
1
|
+
@layer ui{.ui-card-wkzhi{background-color:var(--hd-bg-surface);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md)}@media (max-width: 640px){.ui-card-wkzhi{border-radius:var(--hd-radius-sm)}}.ui-card-wkzhi{transition:border-color var(--hd-duration-fast) var(--hd-ease-standard),box-shadow var(--hd-duration-fast) var(--hd-ease-standard),transform var(--hd-duration-fast) var(--hd-ease-standard)}.ui-card-wkzhi:hover{border-color:var(--hd-border-strong);box-shadow:var(--hd-shadow-2);transform:translateY(-2px)}.ui-card-wkzhi:active{transform:translateY(0);box-shadow:var(--hd-shadow-1)}@media (prefers-reduced-motion: reduce){.ui-card-wkzhi{transition:none}.ui-card-wkzhi:hover,.ui-card-wkzhi:active{transform:none}}.ui-card-wkzhi{position:relative;display:flex;align-items:flex-start;gap:var(--hd-space-3);padding:var(--hd-space-4);height:100%}.ui-card__media--Lm-v{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex-shrink:0;border-radius:var(--hd-radius-xs);background-color:var(--hd-bg-raised);color:var(--hd-text-2);font-size:18px}.ui-card__content-8uHkm{display:flex;flex-direction:column;gap:var(--hd-space-1);flex:1;min-width:0}.ui-card__title-1EwbD{font-size:var(--hd-type-body-size);font-weight:var(--hd-font-weight-semibold);line-height:var(--hd-type-h4-line-height)}.ui-card__link-mhY-M{color:var(--hd-text);text-decoration:none}.ui-card__link-mhY-M:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, 2px)}.ui-card__link-mhY-M:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--hd-radius-md)}.ui-card__description-3O0R7{font-size:var(--hd-type-small-size);line-height:var(--hd-type-body-line-height);color:var(--hd-text-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ui-card__meta-Xzk4q{position:relative;z-index:var(--hd-z-sticky);display:flex;flex-wrap:wrap;align-items:center;gap:var(--hd-space-2)}}
|
|
@@ -3,7 +3,7 @@ import { InputHTMLAttributes, ReactNode } from 'react';
|
|
|
3
3
|
* Anahtar (switch) — anında uygulanan aç/kapa.
|
|
4
4
|
* @example <Switch label="Kampanya bildirimleri" hint="E-posta ile ayda en fazla iki…
|
|
5
5
|
*/
|
|
6
|
-
declare const Switch: import('react').ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "
|
|
6
|
+
declare const Switch: import('react').ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "role"> & {
|
|
7
7
|
/** Anahtarın görünür etiketi. */
|
|
8
8
|
label: ReactNode;
|
|
9
9
|
/** Etiketin altındaki açıklama; `aria-describedby` ile bağlanır. */
|